@economic/taco 14.1.0-EC-85807-code-report-fixes.1 → 14.1.0-EC-86083-poc-array-return.3

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 (85) hide show
  1. package/dist/charts/components/Pie/util.cjs +2 -1
  2. package/dist/charts/components/Pie/util.cjs.map +1 -1
  3. package/dist/charts/components/Pie/util.js +2 -1
  4. package/dist/charts/components/Pie/util.js.map +1 -1
  5. package/dist/components/Layout/components/Sidebar.cjs +1 -2
  6. package/dist/components/Layout/components/Sidebar.cjs.map +1 -1
  7. package/dist/components/Layout/components/Sidebar.js +1 -2
  8. package/dist/components/Layout/components/Sidebar.js.map +1 -1
  9. package/dist/components/Select2/Select2.cjs +2 -2
  10. package/dist/components/Select2/Select2.cjs.map +1 -1
  11. package/dist/components/Select2/Select2.js +2 -2
  12. package/dist/components/Select2/Select2.js.map +1 -1
  13. package/dist/components/Table3/Table3.cjs.map +1 -1
  14. package/dist/components/Table3/Table3.d.ts +1 -1
  15. package/dist/components/Table3/Table3.js.map +1 -1
  16. package/dist/components/Table3/components/Row/Row.cjs +5 -3
  17. package/dist/components/Table3/components/Row/Row.cjs.map +1 -1
  18. package/dist/components/Table3/components/Row/Row.js +5 -3
  19. package/dist/components/Table3/components/Row/Row.js.map +1 -1
  20. package/dist/components/Table3/types.d.ts +2 -1
  21. package/dist/components/Table3/useTable3.cjs +46 -38
  22. package/dist/components/Table3/useTable3.cjs.map +1 -1
  23. package/dist/components/Table3/useTable3.js +46 -38
  24. package/dist/components/Table3/useTable3.js.map +1 -1
  25. package/dist/primitives/Collection/components/Root.cjs +2 -2
  26. package/dist/primitives/Collection/components/Root.cjs.map +1 -1
  27. package/dist/primitives/Collection/components/Root.js +2 -2
  28. package/dist/primitives/Collection/components/Root.js.map +1 -1
  29. package/dist/primitives/Listbox2/components/Context.cjs.map +1 -1
  30. package/dist/primitives/Listbox2/components/Context.d.ts +0 -1
  31. package/dist/primitives/Listbox2/components/Context.js.map +1 -1
  32. package/dist/primitives/Listbox2/components/Option.cjs +2 -8
  33. package/dist/primitives/Listbox2/components/Option.cjs.map +1 -1
  34. package/dist/primitives/Listbox2/components/Option.js +2 -8
  35. package/dist/primitives/Listbox2/components/Option.js.map +1 -1
  36. package/dist/primitives/Listbox2/components/Root.cjs +2 -3
  37. package/dist/primitives/Listbox2/components/Root.cjs.map +1 -1
  38. package/dist/primitives/Listbox2/components/Root.js +2 -3
  39. package/dist/primitives/Listbox2/components/Root.js.map +1 -1
  40. package/dist/primitives/Table/Core/components/Columns/Cell/BuiltIns/GroupedCell.cjs +4 -3
  41. package/dist/primitives/Table/Core/components/Columns/Cell/BuiltIns/GroupedCell.cjs.map +1 -1
  42. package/dist/primitives/Table/Core/components/Columns/Cell/BuiltIns/GroupedCell.js +2 -1
  43. package/dist/primitives/Table/Core/components/Columns/Cell/BuiltIns/GroupedCell.js.map +1 -1
  44. package/dist/primitives/Table/Core/components/Columns/Cell/util.cjs +16 -22
  45. package/dist/primitives/Table/Core/components/Columns/Cell/util.cjs.map +1 -1
  46. package/dist/primitives/Table/Core/components/Columns/Cell/util.js +16 -22
  47. package/dist/primitives/Table/Core/components/Columns/Cell/util.js.map +1 -1
  48. package/dist/primitives/Table/Core/components/Columns/Internal/Actions.cjs +42 -17
  49. package/dist/primitives/Table/Core/components/Columns/Internal/Actions.cjs.map +1 -1
  50. package/dist/primitives/Table/Core/components/Columns/Internal/Actions.d.ts +2 -2
  51. package/dist/primitives/Table/Core/components/Columns/Internal/Actions.js +42 -17
  52. package/dist/primitives/Table/Core/components/Columns/Internal/Actions.js.map +1 -1
  53. package/dist/primitives/Table/Core/components/Header/util.cjs +3 -4
  54. package/dist/primitives/Table/Core/components/Header/util.cjs.map +1 -1
  55. package/dist/primitives/Table/Core/components/Header/util.js +3 -4
  56. package/dist/primitives/Table/Core/components/Header/util.js.map +1 -1
  57. package/dist/primitives/Table/Core/components/Toolbar/components/Filters/ManageFiltersPopover.cjs +1 -2
  58. package/dist/primitives/Table/Core/components/Toolbar/components/Filters/ManageFiltersPopover.cjs.map +1 -1
  59. package/dist/primitives/Table/Core/components/Toolbar/components/Filters/ManageFiltersPopover.js +1 -2
  60. package/dist/primitives/Table/Core/components/Toolbar/components/Filters/ManageFiltersPopover.js.map +1 -1
  61. package/dist/primitives/Table/types.cjs.map +1 -1
  62. package/dist/primitives/Table/types.d.ts +49 -3
  63. package/dist/primitives/Table/types.js.map +1 -1
  64. package/dist/primitives/Table/useTableManager/features/useTableRowActions.cjs +2 -1
  65. package/dist/primitives/Table/useTableManager/features/useTableRowActions.cjs.map +1 -1
  66. package/dist/primitives/Table/useTableManager/features/useTableRowActions.d.ts +3 -3
  67. package/dist/primitives/Table/useTableManager/features/useTableRowActions.js +2 -1
  68. package/dist/primitives/Table/useTableManager/features/useTableRowActions.js.map +1 -1
  69. package/dist/primitives/Table/useTableManager/features/useTableRowGroups.cjs.map +1 -1
  70. package/dist/primitives/Table/useTableManager/features/useTableRowGroups.d.ts +3 -3
  71. package/dist/primitives/Table/useTableManager/features/useTableRowGroups.js.map +1 -1
  72. package/dist/primitives/Table/useTableManager/util/presets.cjs +2 -1
  73. package/dist/primitives/Table/useTableManager/util/presets.cjs.map +1 -1
  74. package/dist/primitives/Table/useTableManager/util/presets.js +2 -1
  75. package/dist/primitives/Table/useTableManager/util/presets.js.map +1 -1
  76. package/dist/primitives/Table/useTableManager/util/rowActions.cjs +7 -0
  77. package/dist/primitives/Table/useTableManager/util/rowActions.cjs.map +1 -0
  78. package/dist/primitives/Table/useTableManager/util/rowActions.d.ts +1 -0
  79. package/dist/primitives/Table/useTableManager/util/rowActions.js +7 -0
  80. package/dist/primitives/Table/useTableManager/util/rowActions.js.map +1 -0
  81. package/dist/primitives/Table/useTableManager/util/setup.cjs +2 -1
  82. package/dist/primitives/Table/useTableManager/util/setup.cjs.map +1 -1
  83. package/dist/primitives/Table/useTableManager/util/setup.js +2 -1
  84. package/dist/primitives/Table/useTableManager/util/setup.js.map +1 -1
  85. package/package.json +4 -4
@@ -31,7 +31,8 @@ function usePieChart(children, options) {
31
31
  const pieProps = {
32
32
  activeIndex,
33
33
  activeShape: (props) => /* @__PURE__ */ React.createElement(ActiveShape, { ...props }),
34
- children: shapes.map((shape) => /* @__PURE__ */ React.createElement(RechartsPrimitive__namespace.Cell, { key: shape.dataKey, color: shape.color, fill: shape.fill })),
34
+ // dataKey falls back to the segment label, which can repeat the index keeps keys unique
35
+ children: shapes.map((shape, index) => /* @__PURE__ */ React.createElement(RechartsPrimitive__namespace.Cell, { key: `${shape.dataKey}-${index}`, color: shape.color, fill: shape.fill })),
35
36
  // data props
36
37
  data: items.filter((item) => !item.isHidden),
37
38
  dataKey: "value",
@@ -1 +1 @@
1
- {"version":3,"file":"util.cjs","sources":["../../../../src/charts/components/Pie/util.tsx"],"sourcesContent":["import React from 'react';\nimport * as RechartsPrimitive from 'recharts';\nimport type { PieSectorDataItem } from 'recharts/types/polar/Pie';\n\nimport type { useChartOptions } from '../useChartData';\nimport { useChart } from '../useChartData';\n\nconst PIE_ACTIVE_WIDTH = 10;\nconst PIE_ACTIVE_WIDTH_OFFSET = 2;\n\nexport function usePieChart<TData extends object>(children: React.ReactNode, options?: useChartOptions) {\n const { items, shapes, activeIndex, setActiveIndex, globalFormatter, toggleItem } = useChart<TData>(children, options);\n const [radius, _setRadius] = React.useState<number>(0);\n\n function setRadius(width: number) {\n _setRadius((width - 2 * (PIE_ACTIVE_WIDTH + PIE_ACTIVE_WIDTH_OFFSET)) / 2);\n }\n\n const pieProps = {\n activeIndex,\n activeShape: (props: PieSectorDataItem) => <ActiveShape {...props} />,\n children: shapes.map(shape => <RechartsPrimitive.Cell key={shape.dataKey} color={shape.color} fill={shape.fill} />),\n // data props\n data: items.filter(item => !item.isHidden),\n dataKey: 'value',\n nameKey: 'label',\n // style props\n isAnimationActive: false,\n startAngle: 90,\n endAngle: -270,\n stroke: '0',\n labelLine: false,\n outerRadius: radius,\n };\n\n return { pieProps, radius, setRadius, items, activeIndex, setActiveIndex, globalFormatter, toggleItem, shapes };\n}\n\nconst PIE_CHART_HOVER = 10;\nconst PIE_CHART_HOVER_OFFSET = 2;\n\nfunction ActiveShape(props: PieSectorDataItem) {\n const { outerRadius = 0, ...attributes } = props;\n\n return (\n <>\n <RechartsPrimitive.Sector {...attributes} outerRadius={outerRadius} />\n <RechartsPrimitive.Sector\n {...attributes}\n innerRadius={outerRadius + PIE_CHART_HOVER_OFFSET}\n outerRadius={outerRadius + PIE_CHART_HOVER}\n opacity={0.4}\n />\n </>\n );\n}\n"],"names":["useChart","RechartsPrimitive"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAOA,MAAM,mBAAmB;AACzB,MAAM,0BAA0B;AAEzB,SAAS,YAAkC,UAA2B,SAA2B;AACpG,QAAM,EAAE,OAAO,QAAQ,aAAa,gBAAgB,iBAAiB,eAAeA,aAAAA,SAAgB,UAAU,OAAO;AACrH,QAAM,CAAC,QAAQ,UAAU,IAAI,MAAM,SAAiB,CAAC;AAErD,WAAS,UAAU,OAAe;AAC9B,gBAAY,QAAQ,KAAK,mBAAmB,4BAA4B,CAAC;AAAA,EAC7E;AAEA,QAAM,WAAW;AAAA,IACb;AAAA,IACA,aAAa,CAAC,UAA6B,sBAAA,cAAC,aAAA,EAAa,GAAG,OAAO;AAAA,IACnE,UAAU,OAAO,IAAI,CAAA,UAAS,sBAAA,cAACC,6BAAkB,MAAlB,EAAuB,KAAK,MAAM,SAAS,OAAO,MAAM,OAAO,MAAM,MAAM,MAAM,CAAE;AAAA;AAAA,IAElH,MAAM,MAAM,OAAO,CAAA,SAAQ,CAAC,KAAK,QAAQ;AAAA,IACzC,SAAS;AAAA,IACT,SAAS;AAAA;AAAA,IAET,mBAAmB;AAAA,IACnB,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,EAAA;AAGjB,SAAO,EAAE,UAAU,QAAQ,WAAW,OAAO,aAAa,gBAAgB,iBAAiB,YAAY,OAAA;AAC3G;AAEA,MAAM,kBAAkB;AACxB,MAAM,yBAAyB;AAE/B,SAAS,YAAY,OAA0B;AAC3C,QAAM,EAAE,cAAc,GAAG,GAAG,eAAe;AAE3C,SACI,sBAAA,cAAA,MAAA,UAAA,0CACKA,6BAAkB,QAAlB,EAA0B,GAAG,YAAY,aAA0B,GACpE,sBAAA;AAAA,IAACA,6BAAkB;AAAA,IAAlB;AAAA,MACI,GAAG;AAAA,MACJ,aAAa,cAAc;AAAA,MAC3B,aAAa,cAAc;AAAA,MAC3B,SAAS;AAAA,IAAA;AAAA,EAAA,CAEjB;AAER;;"}
1
+ {"version":3,"file":"util.cjs","sources":["../../../../src/charts/components/Pie/util.tsx"],"sourcesContent":["import React from 'react';\nimport * as RechartsPrimitive from 'recharts';\nimport type { PieSectorDataItem } from 'recharts/types/polar/Pie';\n\nimport type { useChartOptions } from '../useChartData';\nimport { useChart } from '../useChartData';\n\nconst PIE_ACTIVE_WIDTH = 10;\nconst PIE_ACTIVE_WIDTH_OFFSET = 2;\n\nexport function usePieChart<TData extends object>(children: React.ReactNode, options?: useChartOptions) {\n const { items, shapes, activeIndex, setActiveIndex, globalFormatter, toggleItem } = useChart<TData>(children, options);\n const [radius, _setRadius] = React.useState<number>(0);\n\n function setRadius(width: number) {\n _setRadius((width - 2 * (PIE_ACTIVE_WIDTH + PIE_ACTIVE_WIDTH_OFFSET)) / 2);\n }\n\n const pieProps = {\n activeIndex,\n activeShape: (props: PieSectorDataItem) => <ActiveShape {...props} />,\n // dataKey falls back to the segment label, which can repeat — the index keeps keys unique\n children: shapes.map((shape, index) => (\n <RechartsPrimitive.Cell key={`${shape.dataKey}-${index}`} color={shape.color} fill={shape.fill} />\n )),\n // data props\n data: items.filter(item => !item.isHidden),\n dataKey: 'value',\n nameKey: 'label',\n // style props\n isAnimationActive: false,\n startAngle: 90,\n endAngle: -270,\n stroke: '0',\n labelLine: false,\n outerRadius: radius,\n };\n\n return { pieProps, radius, setRadius, items, activeIndex, setActiveIndex, globalFormatter, toggleItem, shapes };\n}\n\nconst PIE_CHART_HOVER = 10;\nconst PIE_CHART_HOVER_OFFSET = 2;\n\nfunction ActiveShape(props: PieSectorDataItem) {\n const { outerRadius = 0, ...attributes } = props;\n\n return (\n <>\n <RechartsPrimitive.Sector {...attributes} outerRadius={outerRadius} />\n <RechartsPrimitive.Sector\n {...attributes}\n innerRadius={outerRadius + PIE_CHART_HOVER_OFFSET}\n outerRadius={outerRadius + PIE_CHART_HOVER}\n opacity={0.4}\n />\n </>\n );\n}\n"],"names":["useChart","RechartsPrimitive"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAOA,MAAM,mBAAmB;AACzB,MAAM,0BAA0B;AAEzB,SAAS,YAAkC,UAA2B,SAA2B;AACpG,QAAM,EAAE,OAAO,QAAQ,aAAa,gBAAgB,iBAAiB,eAAeA,aAAAA,SAAgB,UAAU,OAAO;AACrH,QAAM,CAAC,QAAQ,UAAU,IAAI,MAAM,SAAiB,CAAC;AAErD,WAAS,UAAU,OAAe;AAC9B,gBAAY,QAAQ,KAAK,mBAAmB,4BAA4B,CAAC;AAAA,EAC7E;AAEA,QAAM,WAAW;AAAA,IACb;AAAA,IACA,aAAa,CAAC,UAA6B,sBAAA,cAAC,aAAA,EAAa,GAAG,OAAO;AAAA;AAAA,IAEnE,UAAU,OAAO,IAAI,CAAC,OAAO,UACzB,sBAAA,cAACC,6BAAkB,MAAlB,EAAuB,KAAK,GAAG,MAAM,OAAO,IAAI,KAAK,IAAI,OAAO,MAAM,OAAO,MAAM,MAAM,KAAA,CAAM,CACnG;AAAA;AAAA,IAED,MAAM,MAAM,OAAO,CAAA,SAAQ,CAAC,KAAK,QAAQ;AAAA,IACzC,SAAS;AAAA,IACT,SAAS;AAAA;AAAA,IAET,mBAAmB;AAAA,IACnB,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,EAAA;AAGjB,SAAO,EAAE,UAAU,QAAQ,WAAW,OAAO,aAAa,gBAAgB,iBAAiB,YAAY,OAAA;AAC3G;AAEA,MAAM,kBAAkB;AACxB,MAAM,yBAAyB;AAE/B,SAAS,YAAY,OAA0B;AAC3C,QAAM,EAAE,cAAc,GAAG,GAAG,eAAe;AAE3C,SACI,sBAAA,cAAA,MAAA,UAAA,0CACKA,6BAAkB,QAAlB,EAA0B,GAAG,YAAY,aAA0B,GACpE,sBAAA;AAAA,IAACA,6BAAkB;AAAA,IAAlB;AAAA,MACI,GAAG;AAAA,MACJ,aAAa,cAAc;AAAA,MAC3B,aAAa,cAAc;AAAA,MAC3B,SAAS;AAAA,IAAA;AAAA,EAAA,CAEjB;AAER;;"}
@@ -12,7 +12,8 @@ function usePieChart(children, options) {
12
12
  const pieProps = {
13
13
  activeIndex,
14
14
  activeShape: (props) => /* @__PURE__ */ React__default.createElement(ActiveShape, { ...props }),
15
- children: shapes.map((shape) => /* @__PURE__ */ React__default.createElement(RechartsPrimitive.Cell, { key: shape.dataKey, color: shape.color, fill: shape.fill })),
15
+ // dataKey falls back to the segment label, which can repeat the index keeps keys unique
16
+ children: shapes.map((shape, index) => /* @__PURE__ */ React__default.createElement(RechartsPrimitive.Cell, { key: `${shape.dataKey}-${index}`, color: shape.color, fill: shape.fill })),
16
17
  // data props
17
18
  data: items.filter((item) => !item.isHidden),
18
19
  dataKey: "value",
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sources":["../../../../src/charts/components/Pie/util.tsx"],"sourcesContent":["import React from 'react';\nimport * as RechartsPrimitive from 'recharts';\nimport type { PieSectorDataItem } from 'recharts/types/polar/Pie';\n\nimport type { useChartOptions } from '../useChartData';\nimport { useChart } from '../useChartData';\n\nconst PIE_ACTIVE_WIDTH = 10;\nconst PIE_ACTIVE_WIDTH_OFFSET = 2;\n\nexport function usePieChart<TData extends object>(children: React.ReactNode, options?: useChartOptions) {\n const { items, shapes, activeIndex, setActiveIndex, globalFormatter, toggleItem } = useChart<TData>(children, options);\n const [radius, _setRadius] = React.useState<number>(0);\n\n function setRadius(width: number) {\n _setRadius((width - 2 * (PIE_ACTIVE_WIDTH + PIE_ACTIVE_WIDTH_OFFSET)) / 2);\n }\n\n const pieProps = {\n activeIndex,\n activeShape: (props: PieSectorDataItem) => <ActiveShape {...props} />,\n children: shapes.map(shape => <RechartsPrimitive.Cell key={shape.dataKey} color={shape.color} fill={shape.fill} />),\n // data props\n data: items.filter(item => !item.isHidden),\n dataKey: 'value',\n nameKey: 'label',\n // style props\n isAnimationActive: false,\n startAngle: 90,\n endAngle: -270,\n stroke: '0',\n labelLine: false,\n outerRadius: radius,\n };\n\n return { pieProps, radius, setRadius, items, activeIndex, setActiveIndex, globalFormatter, toggleItem, shapes };\n}\n\nconst PIE_CHART_HOVER = 10;\nconst PIE_CHART_HOVER_OFFSET = 2;\n\nfunction ActiveShape(props: PieSectorDataItem) {\n const { outerRadius = 0, ...attributes } = props;\n\n return (\n <>\n <RechartsPrimitive.Sector {...attributes} outerRadius={outerRadius} />\n <RechartsPrimitive.Sector\n {...attributes}\n innerRadius={outerRadius + PIE_CHART_HOVER_OFFSET}\n outerRadius={outerRadius + PIE_CHART_HOVER}\n opacity={0.4}\n />\n </>\n );\n}\n"],"names":["React"],"mappings":";;;AAOA,MAAM,mBAAmB;AACzB,MAAM,0BAA0B;AAEzB,SAAS,YAAkC,UAA2B,SAA2B;AACpG,QAAM,EAAE,OAAO,QAAQ,aAAa,gBAAgB,iBAAiB,eAAe,SAAgB,UAAU,OAAO;AACrH,QAAM,CAAC,QAAQ,UAAU,IAAIA,eAAM,SAAiB,CAAC;AAErD,WAAS,UAAU,OAAe;AAC9B,gBAAY,QAAQ,KAAK,mBAAmB,4BAA4B,CAAC;AAAA,EAC7E;AAEA,QAAM,WAAW;AAAA,IACb;AAAA,IACA,aAAa,CAAC,UAA6BA,+BAAA,cAAC,aAAA,EAAa,GAAG,OAAO;AAAA,IACnE,UAAU,OAAO,IAAI,CAAA,UAASA,+BAAA,cAAC,kBAAkB,MAAlB,EAAuB,KAAK,MAAM,SAAS,OAAO,MAAM,OAAO,MAAM,MAAM,MAAM,CAAE;AAAA;AAAA,IAElH,MAAM,MAAM,OAAO,CAAA,SAAQ,CAAC,KAAK,QAAQ;AAAA,IACzC,SAAS;AAAA,IACT,SAAS;AAAA;AAAA,IAET,mBAAmB;AAAA,IACnB,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,EAAA;AAGjB,SAAO,EAAE,UAAU,QAAQ,WAAW,OAAO,aAAa,gBAAgB,iBAAiB,YAAY,OAAA;AAC3G;AAEA,MAAM,kBAAkB;AACxB,MAAM,yBAAyB;AAE/B,SAAS,YAAY,OAA0B;AAC3C,QAAM,EAAE,cAAc,GAAG,GAAG,eAAe;AAE3C,SACIA,+BAAA,cAAAA,eAAA,UAAA,mDACK,kBAAkB,QAAlB,EAA0B,GAAG,YAAY,aAA0B,GACpEA,+BAAA;AAAA,IAAC,kBAAkB;AAAA,IAAlB;AAAA,MACI,GAAG;AAAA,MACJ,aAAa,cAAc;AAAA,MAC3B,aAAa,cAAc;AAAA,MAC3B,SAAS;AAAA,IAAA;AAAA,EAAA,CAEjB;AAER;"}
1
+ {"version":3,"file":"util.js","sources":["../../../../src/charts/components/Pie/util.tsx"],"sourcesContent":["import React from 'react';\nimport * as RechartsPrimitive from 'recharts';\nimport type { PieSectorDataItem } from 'recharts/types/polar/Pie';\n\nimport type { useChartOptions } from '../useChartData';\nimport { useChart } from '../useChartData';\n\nconst PIE_ACTIVE_WIDTH = 10;\nconst PIE_ACTIVE_WIDTH_OFFSET = 2;\n\nexport function usePieChart<TData extends object>(children: React.ReactNode, options?: useChartOptions) {\n const { items, shapes, activeIndex, setActiveIndex, globalFormatter, toggleItem } = useChart<TData>(children, options);\n const [radius, _setRadius] = React.useState<number>(0);\n\n function setRadius(width: number) {\n _setRadius((width - 2 * (PIE_ACTIVE_WIDTH + PIE_ACTIVE_WIDTH_OFFSET)) / 2);\n }\n\n const pieProps = {\n activeIndex,\n activeShape: (props: PieSectorDataItem) => <ActiveShape {...props} />,\n // dataKey falls back to the segment label, which can repeat — the index keeps keys unique\n children: shapes.map((shape, index) => (\n <RechartsPrimitive.Cell key={`${shape.dataKey}-${index}`} color={shape.color} fill={shape.fill} />\n )),\n // data props\n data: items.filter(item => !item.isHidden),\n dataKey: 'value',\n nameKey: 'label',\n // style props\n isAnimationActive: false,\n startAngle: 90,\n endAngle: -270,\n stroke: '0',\n labelLine: false,\n outerRadius: radius,\n };\n\n return { pieProps, radius, setRadius, items, activeIndex, setActiveIndex, globalFormatter, toggleItem, shapes };\n}\n\nconst PIE_CHART_HOVER = 10;\nconst PIE_CHART_HOVER_OFFSET = 2;\n\nfunction ActiveShape(props: PieSectorDataItem) {\n const { outerRadius = 0, ...attributes } = props;\n\n return (\n <>\n <RechartsPrimitive.Sector {...attributes} outerRadius={outerRadius} />\n <RechartsPrimitive.Sector\n {...attributes}\n innerRadius={outerRadius + PIE_CHART_HOVER_OFFSET}\n outerRadius={outerRadius + PIE_CHART_HOVER}\n opacity={0.4}\n />\n </>\n );\n}\n"],"names":["React"],"mappings":";;;AAOA,MAAM,mBAAmB;AACzB,MAAM,0BAA0B;AAEzB,SAAS,YAAkC,UAA2B,SAA2B;AACpG,QAAM,EAAE,OAAO,QAAQ,aAAa,gBAAgB,iBAAiB,eAAe,SAAgB,UAAU,OAAO;AACrH,QAAM,CAAC,QAAQ,UAAU,IAAIA,eAAM,SAAiB,CAAC;AAErD,WAAS,UAAU,OAAe;AAC9B,gBAAY,QAAQ,KAAK,mBAAmB,4BAA4B,CAAC;AAAA,EAC7E;AAEA,QAAM,WAAW;AAAA,IACb;AAAA,IACA,aAAa,CAAC,UAA6BA,+BAAA,cAAC,aAAA,EAAa,GAAG,OAAO;AAAA;AAAA,IAEnE,UAAU,OAAO,IAAI,CAAC,OAAO,UACzBA,+BAAA,cAAC,kBAAkB,MAAlB,EAAuB,KAAK,GAAG,MAAM,OAAO,IAAI,KAAK,IAAI,OAAO,MAAM,OAAO,MAAM,MAAM,KAAA,CAAM,CACnG;AAAA;AAAA,IAED,MAAM,MAAM,OAAO,CAAA,SAAQ,CAAC,KAAK,QAAQ;AAAA,IACzC,SAAS;AAAA,IACT,SAAS;AAAA;AAAA,IAET,mBAAmB;AAAA,IACnB,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,aAAa;AAAA,EAAA;AAGjB,SAAO,EAAE,UAAU,QAAQ,WAAW,OAAO,aAAa,gBAAgB,iBAAiB,YAAY,OAAA;AAC3G;AAEA,MAAM,kBAAkB;AACxB,MAAM,yBAAyB;AAE/B,SAAS,YAAY,OAA0B;AAC3C,QAAM,EAAE,cAAc,GAAG,GAAG,eAAe;AAE3C,SACIA,+BAAA,cAAAA,eAAA,UAAA,mDACK,kBAAkB,QAAlB,EAA0B,GAAG,YAAY,aAA0B,GACpEA,+BAAA;AAAA,IAAC,kBAAkB;AAAA,IAAlB;AAAA,MACI,GAAG;AAAA,MACJ,aAAa,cAAc;AAAA,MAC3B,aAAa,cAAc;AAAA,MAC3B,SAAS;AAAA,IAAA;AAAA,EAAA,CAEjB;AAER;"}
@@ -44,10 +44,9 @@ const Sidebar = React.forwardRef(function LayoutSidebar(props, ref) {
44
44
  props.className
45
45
  );
46
46
  React.useEffect(() => {
47
- const id = setTimeout(() => {
47
+ setTimeout(() => {
48
48
  setReady(isSmallScreen);
49
49
  }, 1);
50
- return () => clearTimeout(id);
51
50
  }, [isSmallScreen]);
52
51
  const toggleSidebar = () => setSidebarOpen((open) => !open);
53
52
  const content = typeof children === "function" ? children({ isLargeScreen, open: sidebarOpen, toggleSidebar }) : children;
@@ -1 +1 @@
1
- {"version":3,"file":"Sidebar.cjs","sources":["../../../../src/components/Layout/components/Sidebar.tsx"],"sourcesContent":["import cn from 'clsx';\nimport { AnimatePresence, motion } from 'motion/react';\nimport React from 'react';\n\nimport { useIsLargeScreen } from '@/hooks/useIsLargeScreen';\n\nimport { LayoutContext } from './Context';\n\nexport type LayoutSidebarProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> & {\n children:\n | React.ReactNode\n | (({\n isLargeScreen,\n open,\n toggleSidebar,\n }: {\n isLargeScreen: boolean;\n open: boolean;\n toggleSidebar: () => void;\n }) => React.ReactNode);\n};\n\nexport const Sidebar = React.forwardRef<HTMLDivElement, LayoutSidebarProps>(function LayoutSidebar(props, ref) {\n const { children, ...attributes } = props;\n const { sidebarOpen, setSidebarOpen } = React.useContext(LayoutContext);\n const isLargeScreen = useIsLargeScreen();\n const isSmallScreen = !isLargeScreen;\n\n // if it's a large screen we override the open state and make it always visible\n const isVisible = isLargeScreen || sidebarOpen;\n\n // ensures the menu is always closed by default when resizing to a smaller window size\n React.useEffect(() => {\n setSidebarOpen(isLargeScreen);\n }, [isLargeScreen]);\n\n React.useEffect(() => {\n const handleEscapeKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n setSidebarOpen(false);\n }\n };\n\n if (isSmallScreen && sidebarOpen) {\n window.addEventListener('keydown', handleEscapeKey);\n }\n\n return () => {\n window.removeEventListener('keydown', handleEscapeKey);\n };\n }, [isSmallScreen, sidebarOpen]);\n\n const showBackdrop = isSmallScreen && sidebarOpen === true;\n\n const [ready, setReady] = React.useState(isSmallScreen);\n\n const className = cn(\n 'h-full w-64 flex-shrink-0 flex-grow-0 bg-gray-50 print:hidden',\n {\n 'absolute z-10 aria-hidden:-translate-x-64': isSmallScreen,\n // prevent animation when crossing the boundary from large to small screen,\n // this prevents awkward animation in the edge case (resizing the browser, instead of starting at a given size)\n invisible: isSmallScreen && !ready,\n 'visible transition-[transform] duration-300': isSmallScreen && ready,\n 'border-r-2 border-gray-100': !showBackdrop,\n },\n props.className\n );\n\n React.useEffect(() => {\n // ensure state is updated in the next cpu tick so that the animation definitely doesn't run\n const id = setTimeout(() => {\n setReady(isSmallScreen);\n }, 1);\n return () => clearTimeout(id);\n }, [isSmallScreen]);\n\n const toggleSidebar = () => setSidebarOpen(open => !open);\n const content = typeof children === 'function' ? children({ isLargeScreen, open: sidebarOpen, toggleSidebar }) : children;\n\n if (!content) {\n return null;\n }\n\n return (\n <>\n <nav {...attributes} data-responsive={isSmallScreen} aria-hidden={!isVisible} className={className} ref={ref}>\n {content}\n </nav>\n <AnimatePresence>\n {showBackdrop && (\n <motion.div\n aria-hidden\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n onClick={() => setSidebarOpen(false)}\n className=\"fixed inset-0 z-[1] cursor-default overflow-y-auto bg-brand-midnight/[0.3] print:absolute print:overflow-visible\"\n />\n )}\n </AnimatePresence>\n </>\n );\n});\n"],"names":["LayoutContext","useIsLargeScreen","AnimatePresence","motion"],"mappings":";;;;;;;AAsBO,MAAM,UAAU,MAAM,WAA+C,SAAS,cAAc,OAAO,KAAK;AAC3G,QAAM,EAAE,UAAU,GAAG,WAAA,IAAe;AACpC,QAAM,EAAE,aAAa,eAAA,IAAmB,MAAM,WAAWA,QAAAA,aAAa;AACtE,QAAM,gBAAgBC,iBAAAA,iBAAA;AACtB,QAAM,gBAAgB,CAAC;AAGvB,QAAM,YAAY,iBAAiB;AAGnC,QAAM,UAAU,MAAM;AAClB,mBAAe,aAAa;AAAA,EAChC,GAAG,CAAC,aAAa,CAAC;AAElB,QAAM,UAAU,MAAM;AAClB,UAAM,kBAAkB,CAAC,UAAyB;AAC9C,UAAI,MAAM,QAAQ,UAAU;AACxB,cAAM,eAAA;AACN,cAAM,gBAAA;AACN,uBAAe,KAAK;AAAA,MACxB;AAAA,IACJ;AAEA,QAAI,iBAAiB,aAAa;AAC9B,aAAO,iBAAiB,WAAW,eAAe;AAAA,IACtD;AAEA,WAAO,MAAM;AACT,aAAO,oBAAoB,WAAW,eAAe;AAAA,IACzD;AAAA,EACJ,GAAG,CAAC,eAAe,WAAW,CAAC;AAE/B,QAAM,eAAe,iBAAiB,gBAAgB;AAEtD,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAAS,aAAa;AAEtD,QAAM,YAAY;AAAA,IACd;AAAA,IACA;AAAA,MACI,6CAA6C;AAAA;AAAA;AAAA,MAG7C,WAAW,iBAAiB,CAAC;AAAA,MAC7B,+CAA+C,iBAAiB;AAAA,MAChE,8BAA8B,CAAC;AAAA,IAAA;AAAA,IAEnC,MAAM;AAAA,EAAA;AAGV,QAAM,UAAU,MAAM;AAElB,UAAM,KAAK,WAAW,MAAM;AACxB,eAAS,aAAa;AAAA,IAC1B,GAAG,CAAC;AACJ,WAAO,MAAM,aAAa,EAAE;AAAA,EAChC,GAAG,CAAC,aAAa,CAAC;AAElB,QAAM,gBAAgB,MAAM,eAAe,CAAA,SAAQ,CAAC,IAAI;AACxD,QAAM,UAAU,OAAO,aAAa,aAAa,SAAS,EAAE,eAAe,MAAM,aAAa,cAAA,CAAe,IAAI;AAEjH,MAAI,CAAC,SAAS;AACV,WAAO;AAAA,EACX;AAEA,mEAEQ,sBAAA,cAAC,OAAA,EAAK,GAAG,YAAY,mBAAiB,eAAe,eAAa,CAAC,WAAW,WAAsB,IAAA,GAC/F,OACL,GACA,sBAAA,cAACC,MAAAA,uBACI,gBACG,sBAAA;AAAA,IAACC,MAAAA,OAAO;AAAA,IAAP;AAAA,MACG,eAAW;AAAA,MACX,SAAS,EAAE,SAAS,EAAA;AAAA,MACpB,SAAS,EAAE,SAAS,EAAA;AAAA,MACpB,MAAM,EAAE,SAAS,EAAA;AAAA,MACjB,SAAS,MAAM,eAAe,KAAK;AAAA,MACnC,WAAU;AAAA,IAAA;AAAA,EAAA,CAGtB,CACJ;AAER,CAAC;;"}
1
+ {"version":3,"file":"Sidebar.cjs","sources":["../../../../src/components/Layout/components/Sidebar.tsx"],"sourcesContent":["import cn from 'clsx';\nimport { AnimatePresence, motion } from 'motion/react';\nimport React from 'react';\n\nimport { useIsLargeScreen } from '@/hooks/useIsLargeScreen';\n\nimport { LayoutContext } from './Context';\n\nexport type LayoutSidebarProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> & {\n children:\n | React.ReactNode\n | (({\n isLargeScreen,\n open,\n toggleSidebar,\n }: {\n isLargeScreen: boolean;\n open: boolean;\n toggleSidebar: () => void;\n }) => React.ReactNode);\n};\n\nexport const Sidebar = React.forwardRef<HTMLDivElement, LayoutSidebarProps>(function LayoutSidebar(props, ref) {\n const { children, ...attributes } = props;\n const { sidebarOpen, setSidebarOpen } = React.useContext(LayoutContext);\n const isLargeScreen = useIsLargeScreen();\n const isSmallScreen = !isLargeScreen;\n\n // if it's a large screen we override the open state and make it always visible\n const isVisible = isLargeScreen || sidebarOpen;\n\n // ensures the menu is always closed by default when resizing to a smaller window size\n React.useEffect(() => {\n setSidebarOpen(isLargeScreen);\n }, [isLargeScreen]);\n\n React.useEffect(() => {\n const handleEscapeKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n setSidebarOpen(false);\n }\n };\n\n if (isSmallScreen && sidebarOpen) {\n window.addEventListener('keydown', handleEscapeKey);\n }\n\n return () => {\n window.removeEventListener('keydown', handleEscapeKey);\n };\n }, [isSmallScreen, sidebarOpen]);\n\n const showBackdrop = isSmallScreen && sidebarOpen === true;\n\n const [ready, setReady] = React.useState(isSmallScreen);\n\n const className = cn(\n 'h-full w-64 flex-shrink-0 flex-grow-0 bg-gray-50 print:hidden',\n {\n 'absolute z-10 aria-hidden:-translate-x-64': isSmallScreen,\n // prevent animation when crossing the boundary from large to small screen,\n // this prevents awkward animation in the edge case (resizing the browser, instead of starting at a given size)\n invisible: isSmallScreen && !ready,\n 'visible transition-[transform] duration-300': isSmallScreen && ready,\n 'border-r-2 border-gray-100': !showBackdrop,\n },\n props.className\n );\n\n React.useEffect(() => {\n // ensure state is updated in the next cpu tick so that the animation definitely doesn't run\n setTimeout(() => {\n setReady(isSmallScreen);\n }, 1);\n }, [isSmallScreen]);\n\n const toggleSidebar = () => setSidebarOpen(open => !open);\n const content = typeof children === 'function' ? children({ isLargeScreen, open: sidebarOpen, toggleSidebar }) : children;\n\n if (!content) {\n return null;\n }\n\n return (\n <>\n <nav {...attributes} data-responsive={isSmallScreen} aria-hidden={!isVisible} className={className} ref={ref}>\n {content}\n </nav>\n <AnimatePresence>\n {showBackdrop && (\n <motion.div\n aria-hidden\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n onClick={() => setSidebarOpen(false)}\n className=\"fixed inset-0 z-[1] cursor-default overflow-y-auto bg-brand-midnight/[0.3] print:absolute print:overflow-visible\"\n />\n )}\n </AnimatePresence>\n </>\n );\n});\n"],"names":["LayoutContext","useIsLargeScreen","AnimatePresence","motion"],"mappings":";;;;;;;AAsBO,MAAM,UAAU,MAAM,WAA+C,SAAS,cAAc,OAAO,KAAK;AAC3G,QAAM,EAAE,UAAU,GAAG,WAAA,IAAe;AACpC,QAAM,EAAE,aAAa,eAAA,IAAmB,MAAM,WAAWA,QAAAA,aAAa;AACtE,QAAM,gBAAgBC,iBAAAA,iBAAA;AACtB,QAAM,gBAAgB,CAAC;AAGvB,QAAM,YAAY,iBAAiB;AAGnC,QAAM,UAAU,MAAM;AAClB,mBAAe,aAAa;AAAA,EAChC,GAAG,CAAC,aAAa,CAAC;AAElB,QAAM,UAAU,MAAM;AAClB,UAAM,kBAAkB,CAAC,UAAyB;AAC9C,UAAI,MAAM,QAAQ,UAAU;AACxB,cAAM,eAAA;AACN,cAAM,gBAAA;AACN,uBAAe,KAAK;AAAA,MACxB;AAAA,IACJ;AAEA,QAAI,iBAAiB,aAAa;AAC9B,aAAO,iBAAiB,WAAW,eAAe;AAAA,IACtD;AAEA,WAAO,MAAM;AACT,aAAO,oBAAoB,WAAW,eAAe;AAAA,IACzD;AAAA,EACJ,GAAG,CAAC,eAAe,WAAW,CAAC;AAE/B,QAAM,eAAe,iBAAiB,gBAAgB;AAEtD,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAAS,aAAa;AAEtD,QAAM,YAAY;AAAA,IACd;AAAA,IACA;AAAA,MACI,6CAA6C;AAAA;AAAA;AAAA,MAG7C,WAAW,iBAAiB,CAAC;AAAA,MAC7B,+CAA+C,iBAAiB;AAAA,MAChE,8BAA8B,CAAC;AAAA,IAAA;AAAA,IAEnC,MAAM;AAAA,EAAA;AAGV,QAAM,UAAU,MAAM;AAElB,eAAW,MAAM;AACb,eAAS,aAAa;AAAA,IAC1B,GAAG,CAAC;AAAA,EACR,GAAG,CAAC,aAAa,CAAC;AAElB,QAAM,gBAAgB,MAAM,eAAe,CAAA,SAAQ,CAAC,IAAI;AACxD,QAAM,UAAU,OAAO,aAAa,aAAa,SAAS,EAAE,eAAe,MAAM,aAAa,cAAA,CAAe,IAAI;AAEjH,MAAI,CAAC,SAAS;AACV,WAAO;AAAA,EACX;AAEA,mEAEQ,sBAAA,cAAC,OAAA,EAAK,GAAG,YAAY,mBAAiB,eAAe,eAAa,CAAC,WAAW,WAAsB,IAAA,GAC/F,OACL,GACA,sBAAA,cAACC,MAAAA,uBACI,gBACG,sBAAA;AAAA,IAACC,MAAAA,OAAO;AAAA,IAAP;AAAA,MACG,eAAW;AAAA,MACX,SAAS,EAAE,SAAS,EAAA;AAAA,MACpB,SAAS,EAAE,SAAS,EAAA;AAAA,MACpB,MAAM,EAAE,SAAS,EAAA;AAAA,MACjB,SAAS,MAAM,eAAe,KAAK;AAAA,MACnC,WAAU;AAAA,IAAA;AAAA,EAAA,CAGtB,CACJ;AAER,CAAC;;"}
@@ -42,10 +42,9 @@ const Sidebar = React__default.forwardRef(function LayoutSidebar(props, ref) {
42
42
  props.className
43
43
  );
44
44
  React__default.useEffect(() => {
45
- const id = setTimeout(() => {
45
+ setTimeout(() => {
46
46
  setReady(isSmallScreen);
47
47
  }, 1);
48
- return () => clearTimeout(id);
49
48
  }, [isSmallScreen]);
50
49
  const toggleSidebar = () => setSidebarOpen((open) => !open);
51
50
  const content = typeof children === "function" ? children({ isLargeScreen, open: sidebarOpen, toggleSidebar }) : children;
@@ -1 +1 @@
1
- {"version":3,"file":"Sidebar.js","sources":["../../../../src/components/Layout/components/Sidebar.tsx"],"sourcesContent":["import cn from 'clsx';\nimport { AnimatePresence, motion } from 'motion/react';\nimport React from 'react';\n\nimport { useIsLargeScreen } from '@/hooks/useIsLargeScreen';\n\nimport { LayoutContext } from './Context';\n\nexport type LayoutSidebarProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> & {\n children:\n | React.ReactNode\n | (({\n isLargeScreen,\n open,\n toggleSidebar,\n }: {\n isLargeScreen: boolean;\n open: boolean;\n toggleSidebar: () => void;\n }) => React.ReactNode);\n};\n\nexport const Sidebar = React.forwardRef<HTMLDivElement, LayoutSidebarProps>(function LayoutSidebar(props, ref) {\n const { children, ...attributes } = props;\n const { sidebarOpen, setSidebarOpen } = React.useContext(LayoutContext);\n const isLargeScreen = useIsLargeScreen();\n const isSmallScreen = !isLargeScreen;\n\n // if it's a large screen we override the open state and make it always visible\n const isVisible = isLargeScreen || sidebarOpen;\n\n // ensures the menu is always closed by default when resizing to a smaller window size\n React.useEffect(() => {\n setSidebarOpen(isLargeScreen);\n }, [isLargeScreen]);\n\n React.useEffect(() => {\n const handleEscapeKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n setSidebarOpen(false);\n }\n };\n\n if (isSmallScreen && sidebarOpen) {\n window.addEventListener('keydown', handleEscapeKey);\n }\n\n return () => {\n window.removeEventListener('keydown', handleEscapeKey);\n };\n }, [isSmallScreen, sidebarOpen]);\n\n const showBackdrop = isSmallScreen && sidebarOpen === true;\n\n const [ready, setReady] = React.useState(isSmallScreen);\n\n const className = cn(\n 'h-full w-64 flex-shrink-0 flex-grow-0 bg-gray-50 print:hidden',\n {\n 'absolute z-10 aria-hidden:-translate-x-64': isSmallScreen,\n // prevent animation when crossing the boundary from large to small screen,\n // this prevents awkward animation in the edge case (resizing the browser, instead of starting at a given size)\n invisible: isSmallScreen && !ready,\n 'visible transition-[transform] duration-300': isSmallScreen && ready,\n 'border-r-2 border-gray-100': !showBackdrop,\n },\n props.className\n );\n\n React.useEffect(() => {\n // ensure state is updated in the next cpu tick so that the animation definitely doesn't run\n const id = setTimeout(() => {\n setReady(isSmallScreen);\n }, 1);\n return () => clearTimeout(id);\n }, [isSmallScreen]);\n\n const toggleSidebar = () => setSidebarOpen(open => !open);\n const content = typeof children === 'function' ? children({ isLargeScreen, open: sidebarOpen, toggleSidebar }) : children;\n\n if (!content) {\n return null;\n }\n\n return (\n <>\n <nav {...attributes} data-responsive={isSmallScreen} aria-hidden={!isVisible} className={className} ref={ref}>\n {content}\n </nav>\n <AnimatePresence>\n {showBackdrop && (\n <motion.div\n aria-hidden\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n onClick={() => setSidebarOpen(false)}\n className=\"fixed inset-0 z-[1] cursor-default overflow-y-auto bg-brand-midnight/[0.3] print:absolute print:overflow-visible\"\n />\n )}\n </AnimatePresence>\n </>\n );\n});\n"],"names":["React"],"mappings":";;;;;AAsBO,MAAM,UAAUA,eAAM,WAA+C,SAAS,cAAc,OAAO,KAAK;AAC3G,QAAM,EAAE,UAAU,GAAG,WAAA,IAAe;AACpC,QAAM,EAAE,aAAa,eAAA,IAAmBA,eAAM,WAAW,aAAa;AACtE,QAAM,gBAAgB,iBAAA;AACtB,QAAM,gBAAgB,CAAC;AAGvB,QAAM,YAAY,iBAAiB;AAGnCA,iBAAM,UAAU,MAAM;AAClB,mBAAe,aAAa;AAAA,EAChC,GAAG,CAAC,aAAa,CAAC;AAElBA,iBAAM,UAAU,MAAM;AAClB,UAAM,kBAAkB,CAAC,UAAyB;AAC9C,UAAI,MAAM,QAAQ,UAAU;AACxB,cAAM,eAAA;AACN,cAAM,gBAAA;AACN,uBAAe,KAAK;AAAA,MACxB;AAAA,IACJ;AAEA,QAAI,iBAAiB,aAAa;AAC9B,aAAO,iBAAiB,WAAW,eAAe;AAAA,IACtD;AAEA,WAAO,MAAM;AACT,aAAO,oBAAoB,WAAW,eAAe;AAAA,IACzD;AAAA,EACJ,GAAG,CAAC,eAAe,WAAW,CAAC;AAE/B,QAAM,eAAe,iBAAiB,gBAAgB;AAEtD,QAAM,CAAC,OAAO,QAAQ,IAAIA,eAAM,SAAS,aAAa;AAEtD,QAAM,YAAY;AAAA,IACd;AAAA,IACA;AAAA,MACI,6CAA6C;AAAA;AAAA;AAAA,MAG7C,WAAW,iBAAiB,CAAC;AAAA,MAC7B,+CAA+C,iBAAiB;AAAA,MAChE,8BAA8B,CAAC;AAAA,IAAA;AAAA,IAEnC,MAAM;AAAA,EAAA;AAGVA,iBAAM,UAAU,MAAM;AAElB,UAAM,KAAK,WAAW,MAAM;AACxB,eAAS,aAAa;AAAA,IAC1B,GAAG,CAAC;AACJ,WAAO,MAAM,aAAa,EAAE;AAAA,EAChC,GAAG,CAAC,aAAa,CAAC;AAElB,QAAM,gBAAgB,MAAM,eAAe,CAAA,SAAQ,CAAC,IAAI;AACxD,QAAM,UAAU,OAAO,aAAa,aAAa,SAAS,EAAE,eAAe,MAAM,aAAa,cAAA,CAAe,IAAI;AAEjH,MAAI,CAAC,SAAS;AACV,WAAO;AAAA,EACX;AAEA,qFAEQA,+BAAA,cAAC,OAAA,EAAK,GAAG,YAAY,mBAAiB,eAAe,eAAa,CAAC,WAAW,WAAsB,IAAA,GAC/F,OACL,GACAA,+BAAA,cAAC,uBACI,gBACGA,+BAAA;AAAA,IAAC,OAAO;AAAA,IAAP;AAAA,MACG,eAAW;AAAA,MACX,SAAS,EAAE,SAAS,EAAA;AAAA,MACpB,SAAS,EAAE,SAAS,EAAA;AAAA,MACpB,MAAM,EAAE,SAAS,EAAA;AAAA,MACjB,SAAS,MAAM,eAAe,KAAK;AAAA,MACnC,WAAU;AAAA,IAAA;AAAA,EAAA,CAGtB,CACJ;AAER,CAAC;"}
1
+ {"version":3,"file":"Sidebar.js","sources":["../../../../src/components/Layout/components/Sidebar.tsx"],"sourcesContent":["import cn from 'clsx';\nimport { AnimatePresence, motion } from 'motion/react';\nimport React from 'react';\n\nimport { useIsLargeScreen } from '@/hooks/useIsLargeScreen';\n\nimport { LayoutContext } from './Context';\n\nexport type LayoutSidebarProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> & {\n children:\n | React.ReactNode\n | (({\n isLargeScreen,\n open,\n toggleSidebar,\n }: {\n isLargeScreen: boolean;\n open: boolean;\n toggleSidebar: () => void;\n }) => React.ReactNode);\n};\n\nexport const Sidebar = React.forwardRef<HTMLDivElement, LayoutSidebarProps>(function LayoutSidebar(props, ref) {\n const { children, ...attributes } = props;\n const { sidebarOpen, setSidebarOpen } = React.useContext(LayoutContext);\n const isLargeScreen = useIsLargeScreen();\n const isSmallScreen = !isLargeScreen;\n\n // if it's a large screen we override the open state and make it always visible\n const isVisible = isLargeScreen || sidebarOpen;\n\n // ensures the menu is always closed by default when resizing to a smaller window size\n React.useEffect(() => {\n setSidebarOpen(isLargeScreen);\n }, [isLargeScreen]);\n\n React.useEffect(() => {\n const handleEscapeKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n setSidebarOpen(false);\n }\n };\n\n if (isSmallScreen && sidebarOpen) {\n window.addEventListener('keydown', handleEscapeKey);\n }\n\n return () => {\n window.removeEventListener('keydown', handleEscapeKey);\n };\n }, [isSmallScreen, sidebarOpen]);\n\n const showBackdrop = isSmallScreen && sidebarOpen === true;\n\n const [ready, setReady] = React.useState(isSmallScreen);\n\n const className = cn(\n 'h-full w-64 flex-shrink-0 flex-grow-0 bg-gray-50 print:hidden',\n {\n 'absolute z-10 aria-hidden:-translate-x-64': isSmallScreen,\n // prevent animation when crossing the boundary from large to small screen,\n // this prevents awkward animation in the edge case (resizing the browser, instead of starting at a given size)\n invisible: isSmallScreen && !ready,\n 'visible transition-[transform] duration-300': isSmallScreen && ready,\n 'border-r-2 border-gray-100': !showBackdrop,\n },\n props.className\n );\n\n React.useEffect(() => {\n // ensure state is updated in the next cpu tick so that the animation definitely doesn't run\n setTimeout(() => {\n setReady(isSmallScreen);\n }, 1);\n }, [isSmallScreen]);\n\n const toggleSidebar = () => setSidebarOpen(open => !open);\n const content = typeof children === 'function' ? children({ isLargeScreen, open: sidebarOpen, toggleSidebar }) : children;\n\n if (!content) {\n return null;\n }\n\n return (\n <>\n <nav {...attributes} data-responsive={isSmallScreen} aria-hidden={!isVisible} className={className} ref={ref}>\n {content}\n </nav>\n <AnimatePresence>\n {showBackdrop && (\n <motion.div\n aria-hidden\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n onClick={() => setSidebarOpen(false)}\n className=\"fixed inset-0 z-[1] cursor-default overflow-y-auto bg-brand-midnight/[0.3] print:absolute print:overflow-visible\"\n />\n )}\n </AnimatePresence>\n </>\n );\n});\n"],"names":["React"],"mappings":";;;;;AAsBO,MAAM,UAAUA,eAAM,WAA+C,SAAS,cAAc,OAAO,KAAK;AAC3G,QAAM,EAAE,UAAU,GAAG,WAAA,IAAe;AACpC,QAAM,EAAE,aAAa,eAAA,IAAmBA,eAAM,WAAW,aAAa;AACtE,QAAM,gBAAgB,iBAAA;AACtB,QAAM,gBAAgB,CAAC;AAGvB,QAAM,YAAY,iBAAiB;AAGnCA,iBAAM,UAAU,MAAM;AAClB,mBAAe,aAAa;AAAA,EAChC,GAAG,CAAC,aAAa,CAAC;AAElBA,iBAAM,UAAU,MAAM;AAClB,UAAM,kBAAkB,CAAC,UAAyB;AAC9C,UAAI,MAAM,QAAQ,UAAU;AACxB,cAAM,eAAA;AACN,cAAM,gBAAA;AACN,uBAAe,KAAK;AAAA,MACxB;AAAA,IACJ;AAEA,QAAI,iBAAiB,aAAa;AAC9B,aAAO,iBAAiB,WAAW,eAAe;AAAA,IACtD;AAEA,WAAO,MAAM;AACT,aAAO,oBAAoB,WAAW,eAAe;AAAA,IACzD;AAAA,EACJ,GAAG,CAAC,eAAe,WAAW,CAAC;AAE/B,QAAM,eAAe,iBAAiB,gBAAgB;AAEtD,QAAM,CAAC,OAAO,QAAQ,IAAIA,eAAM,SAAS,aAAa;AAEtD,QAAM,YAAY;AAAA,IACd;AAAA,IACA;AAAA,MACI,6CAA6C;AAAA;AAAA;AAAA,MAG7C,WAAW,iBAAiB,CAAC;AAAA,MAC7B,+CAA+C,iBAAiB;AAAA,MAChE,8BAA8B,CAAC;AAAA,IAAA;AAAA,IAEnC,MAAM;AAAA,EAAA;AAGVA,iBAAM,UAAU,MAAM;AAElB,eAAW,MAAM;AACb,eAAS,aAAa;AAAA,IAC1B,GAAG,CAAC;AAAA,EACR,GAAG,CAAC,aAAa,CAAC;AAElB,QAAM,gBAAgB,MAAM,eAAe,CAAA,SAAQ,CAAC,IAAI;AACxD,QAAM,UAAU,OAAO,aAAa,aAAa,SAAS,EAAE,eAAe,MAAM,aAAa,cAAA,CAAe,IAAI;AAEjH,MAAI,CAAC,SAAS;AACV,WAAO;AAAA,EACX;AAEA,qFAEQA,+BAAA,cAAC,OAAA,EAAK,GAAG,YAAY,mBAAiB,eAAe,eAAa,CAAC,WAAW,WAAsB,IAAA,GAC/F,OACL,GACAA,+BAAA,cAAC,uBACI,gBACGA,+BAAA;AAAA,IAAC,OAAO;AAAA,IAAP;AAAA,MACG,eAAW;AAAA,MACX,SAAS,EAAE,SAAS,EAAA;AAAA,MACpB,SAAS,EAAE,SAAS,EAAA;AAAA,MACpB,MAAM,EAAE,SAAS,EAAA;AAAA,MACjB,SAAS,MAAM,eAAe,KAAK;AAAA,MACnC,WAAU;AAAA,IAAA;AAAA,EAAA,CAGtB,CACJ;AAER,CAAC;"}
@@ -253,9 +253,9 @@ function _Select2Inner(props, ref) {
253
253
  Trigger.Trigger,
254
254
  {
255
255
  ...otherProps,
256
- "aria-haspopup": "dialog",
256
+ "aria-haspopup": "listbox",
257
+ "aria-multiselectable": multiple,
257
258
  "data-taco": "Select2",
258
- "data-multiple": multiple ? true : void 0,
259
259
  emptyValue,
260
260
  onKeyDown: handleKeyDown,
261
261
  placeholder,
@@ -1 +1 @@
1
- {"version":3,"file":"Select2.cjs","sources":["../../../src/components/Select2/Select2.tsx"],"sourcesContent":["import { Popover as PopoverPrimitive } from '@base-ui/react/popover';\nimport cn from 'clsx';\nimport React from 'react';\n\nimport { LegacyButton, Spinner, useLocalization } from '@/components';\nimport { useBoundingClientRectListener } from '@/hooks/useBoundingClientRectListener';\nimport { useControlled } from '@/hooks/useControlled';\nimport { useIsFormControl } from '@/hooks/useIsFormControl';\nimport { useIsHoverStatePaused } from '@/hooks/useIsHoverStatePaused';\nimport { useMergedRef } from '@/hooks/useMergedRef';\nimport { BubbleSelect } from '@/primitives/BubbleSelect';\nimport type { CollectionRef } from '@/primitives/Collection/Collection';\nimport * as ListboxPrimitive from '@/primitives/Listbox2/Listbox2';\nimport type { FontSize } from '@/types';\nimport { fixedForwardRef, FontSizes } from '@/types';\nimport { isAriaDirectionKey } from '@/utils/aria';\nimport { debounce } from '@/utils/debounce';\nimport { getNextFocussableElement, isElementInsideTable3OrReport } from '@/utils/dom';\nimport { createCustomKeyboardEvent } from '@/utils/input';\n\nimport { Collection } from './components/Collection';\nimport { Select2Context } from './components/Context';\nimport { Create } from './components/Create';\nimport type { Select2GroupProps } from './components/Group';\nimport { Group } from './components/Group';\nimport type { Select2OptionProps } from './components/Option';\nimport { Option } from './components/Option';\nimport { Search } from './components/Search';\nimport type { Select2TitleProps } from './components/Title';\nimport { Title } from './components/Title';\nimport { Trigger } from './components/Trigger';\nimport { isGroup, useChildren } from './hooks/useChildren';\nimport type {\n Select2Child,\n Select2Children,\n Select2CreateHandler,\n Select2CreateDialogRenderer,\n Select2DeleteHandler,\n Select2EditHandler,\n Select2OptionValue,\n Select2Value,\n} from './types';\nimport { createCollectionClassName, filterOption, FONT_SIZE_CLASSNAME } from './utilities';\n\ntype Select2Texts = {\n allSelect: string;\n allDeselect: string;\n cancel: string;\n chooseColor: string;\n create: string;\n delete: string;\n save: string;\n search: string;\n searchOrCreate: string;\n selectAll: string;\n selectAllResults: string;\n deselectAll: string;\n deselectAllResults: string;\n};\n\ntype Select2Props<T extends Select2Value = Select2Value> = Omit<\n React.HTMLAttributes<HTMLButtonElement>,\n 'children' | 'defaultValue' | 'onChange' | 'value'\n> & {\n /** Autofocus Select2 when loaded **/\n autoFocus?: boolean;\n /** Array of options in Select2 */\n children: Select2Children;\n /** Initial value of the input in Select2 */\n defaultValue?: T;\n /** Set what value should have an empty option in Select2 */\n emptyValue?: Extract<T, Select2OptionValue>;\n /** Whether the Select2 is in a disabled state **/\n disabled?: boolean;\n /** Font size of text in Select2 **/\n fontSize?: FontSize;\n /** Draws attention to the Select2 by changing its style and making it visually prominent */\n highlighted?: boolean;\n /** Whether the Select2 is in an invalid state **/\n invalid?: boolean;\n /** Whether the Select2 is loading the data **/\n loading?: boolean;\n /** Whether the Select2 allows selecting multiple values **/\n multiple?: boolean;\n /** Whether the Select2 is in an invalid state **/\n name?: string;\n /** Handler called when user chooses an option from the provided options **/\n onChange?: (value: T) => void;\n /** Handler called when user creates a new option **/\n onCreate?: Select2CreateHandler;\n /** Handler called when user deletes an option **/\n onDelete?: Select2DeleteHandler;\n /** Handler called when user edits an option **/\n onEdit?: Select2EditHandler;\n /** Placeholder showed when nothing is selected **/\n placeholder?: string;\n /** Whether the Select2 is in a readonly state **/\n readOnly?: boolean;\n required?: boolean;\n /** Renders select options as tags **/\n tags?: boolean;\n /** Value of the input in select2 */\n value?: T;\n /** Create dialog component, if specified, then create button will become always visible in the bottom of options dropdown,\n * when clicked, it will open create dialog and wait for 'onCreate' handler to be triggered from the dialog */\n createDialog?: Select2CreateDialogRenderer;\n /** Create button text */\n createTriggerText?: string;\n};\n\n// generic overload is the public face; the wide implementation signature lets the internals\n// (which all operate on Select2Value) consume the props without assertions\nfunction _Select2Inner<T extends Select2Value = Select2Value>(\n props: Select2Props<T>,\n ref: React.Ref<HTMLButtonElement>\n): React.JSX.Element;\nfunction _Select2Inner(props: Select2Props, ref: React.Ref<HTMLButtonElement>): React.JSX.Element {\n const {\n children: initChildren,\n defaultValue,\n disabled = false,\n emptyValue = undefined,\n fontSize,\n highlighted = false,\n invalid = false,\n loading,\n multiple = false,\n name,\n onChange,\n onCreate,\n onDelete,\n onEdit,\n placeholder,\n readOnly = false,\n tags = false,\n value: prop,\n createDialog,\n createTriggerText,\n ...otherProps\n } = props;\n\n const emptyOption: React.ReactElement<Select2OptionProps> | undefined = React.useMemo(() => {\n if (emptyValue !== undefined && !multiple) {\n // Empty option has 0px height, because it's empty, so need to apply height manually\n return <Option key=\"__empty\" children=\"\" value={emptyValue} className=\"h-8\" />;\n }\n\n return undefined;\n }, [emptyValue, multiple]);\n\n const initialChildren = React.useMemo(() => {\n // flatten nested arrays from maps and strip conditionals (false/null) so the internals see a flat list\n const children = React.Children.toArray(initChildren).filter((child): child is Select2Child =>\n React.isValidElement(child)\n );\n\n return emptyOption ? [emptyOption, ...children] : children;\n }, [emptyOption, initChildren]);\n\n // refs\n const internalRef = useMergedRef<HTMLButtonElement>(ref);\n const listboxRef = React.useRef<CollectionRef>(null);\n const searchRef = React.useRef<HTMLInputElement>(null);\n const { texts } = useLocalization();\n // align the listbox min width with the width of the input - it should never be smaller\n const dimensions = useBoundingClientRectListener(internalRef);\n\n // state\n const [open, setOpen] = React.useState(false);\n const [value, _setValue] = useControlled<Select2Value>({\n // uncontrolled\n defaultValue,\n // controlled\n onChange,\n value: prop,\n });\n const setValue = ListboxPrimitive.createListboxValueSetter(\n multiple,\n // the state can genuinely become undefined (form reset), but widening `useControlled` to\n // `Select2Value | undefined` would require onChange to accept `undefined` — a breaking API change\n _setValue as React.Dispatch<React.SetStateAction<Select2Value | undefined>>\n );\n const [validationError, setValidationError] = React.useState<Error | undefined>();\n const [shouldPauseHoverState, setShouldPauseHoverState] = useIsHoverStatePaused();\n\n const { flattenedChildren, filteredChildren, searchQuery, setSearchQuery } = useChildren({\n children: initialChildren,\n emptyValue,\n multiple,\n open,\n setValue,\n value,\n });\n\n // context\n const context = {\n disabled,\n highlighted,\n invalid,\n listboxRef,\n multiple,\n onCreate,\n onDelete,\n onEdit,\n open,\n readOnly,\n ref: internalRef,\n searchQuery,\n searchRef,\n setOpen,\n setSearchQuery,\n setValidationError,\n setValue,\n shouldPauseHoverState,\n setShouldPauseHoverState,\n tags,\n fontSize,\n validationError,\n value,\n createDialog,\n createTriggerText,\n };\n\n const hasInlineCreation = onCreate && !createDialog;\n const hasSearch = flattenedChildren.length > 5 || hasInlineCreation;\n const visibleChildren = searchQuery === '' ? initialChildren : filteredChildren;\n const selectOptions =\n searchQuery === ''\n ? flattenedChildren.map(child => child.props.value)\n : filteredChildren.flatMap(child => {\n if (isGroup(child)) {\n return Array.isArray(child.props.children)\n ? child.props.children.map(subChild => subChild.props.value)\n : [];\n }\n return child.props.value;\n });\n\n // support typeahead functionality when search isn't available\n const queryTimeoutRef = React.useRef('');\n\n const typeahead = debounce(function () {\n if (!queryTimeoutRef.current) {\n return;\n }\n\n // match against the flattened list — selectOptions is flattened too, so indices\n // stay aligned when groups are present, and group members can be matched\n const matchedValueIndex = flattenedChildren.findIndex(child => filterOption(child, queryTimeoutRef.current));\n\n if (matchedValueIndex > -1 && selectOptions[matchedValueIndex] !== undefined) {\n setValue(selectOptions[matchedValueIndex]);\n }\n\n queryTimeoutRef.current = '';\n }, 200);\n\n const setValueIfMatched = (query: string) => {\n queryTimeoutRef.current = queryTimeoutRef.current + query;\n typeahead();\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n if (open) {\n event.preventDefault();\n } else if (isElementInsideTable3OrReport(event.currentTarget) && isAriaDirectionKey(event)) {\n return;\n } else if (!event.ctrlKey && !event.metaKey && (event.key === 'ArrowDown' || /^[a-z0-9]$/iu.test(event.key))) {\n setOpen(true);\n\n if (!hasSearch) {\n setValueIfMatched(event.key);\n }\n }\n\n // Collect the first character when opening with keyboard (when user starts typing while focused on a trigger)\n if (hasSearch && /^[a-z0-9]$/iu.test(event.key)) {\n setSearchQuery(prev => prev + event.key);\n }\n\n // the focus should always remain on the input, so we forward events on to the listbox\n listboxRef.current?.dispatchEvent(createCustomKeyboardEvent(event));\n };\n\n const shouldFocusNextRef = React.useRef<number | undefined>(undefined);\n\n const handleHorizontalNavigation = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (isElementInsideTable3OrReport(internalRef.current)) {\n const isTriggeredFromPopover = event.target instanceof Node && event.currentTarget.contains?.(event.target);\n\n if ((event.key === 'ArrowLeft' || event.key === 'ArrowRight') && isTriggeredFromPopover) {\n // prevents scrolling horizontally in the table on arrow left/right.\n event.preventDefault();\n event.stopPropagation();\n\n shouldFocusNextRef.current = event.key === 'ArrowLeft' ? -1 : +1;\n setOpen(false);\n }\n }\n };\n\n const handleListboxKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n if (isAriaDirectionKey(event)) {\n setShouldPauseHoverState(true);\n return;\n }\n\n if (event.key === 'Tab') {\n shouldFocusNextRef.current = event.shiftKey ? -1 : +1;\n setOpen(false);\n return;\n }\n\n // Handle Escape key to close the select without closing the parent dialog\n if (!hasSearch && event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n setOpen(false);\n return;\n }\n\n // support typeahead to set the value by typing its text\n if (!hasSearch && /^[a-z0-9]$/iu.test(event.key)) {\n setValueIfMatched(event.key);\n }\n };\n\n const handleOpenChange = (open: boolean, details: { reason: string; event: Event }) => {\n if (!open && (details.reason === 'outside-press' || details.reason === 'focus-out')) {\n otherProps.onBlur?.(details.event as unknown as React.FocusEvent<HTMLButtonElement>);\n }\n setOpen(open);\n };\n\n const handleFinalFocus = (closeType: 'mouse' | 'touch' | 'keyboard' | 'pen' | '') => {\n if (shouldFocusNextRef.current !== undefined) {\n const el = getNextFocussableElement(internalRef.current, shouldFocusNextRef.current);\n shouldFocusNextRef.current = undefined;\n return el || false;\n }\n if (closeType === 'mouse' || closeType === 'touch') {\n // Don't steal focus — the clicked element receives it naturally.\n return false;\n }\n return true;\n };\n const areAllSelected = Array.isArray(value) && selectOptions.every(option => value.includes(option));\n\n const selectAllText = React.useMemo(() => {\n if (searchQuery === '') {\n if (areAllSelected) {\n return texts.select2.deselectAll;\n }\n return texts.select2.selectAll;\n }\n\n if (areAllSelected) {\n return texts.select2.deselectAllResults;\n }\n\n return texts.select2.selectAllResults;\n }, [areAllSelected, searchQuery]);\n\n const selectAll = () => {\n if (!Array.isArray(value) || value.length === 0) {\n setValue(selectOptions);\n } else {\n // array of all available options which are not selected\n const preselectedValues = selectOptions.filter(option => !value.includes(option));\n setValue([...value, ...preselectedValues]);\n }\n };\n\n const deselectAll = () => {\n if (searchQuery === '') {\n setValue([]);\n } else {\n const nextValue = Array.isArray(value) && value.filter(subValue => !selectOptions.includes(subValue));\n setValue(nextValue);\n }\n };\n\n const className = cn(\n 'rounded border border-gray-300 bg-white py-1.5 shadow-md',\n {\n 'focus-within:yt-focus': !hasSearch,\n 'outline-none': hasSearch,\n },\n createCollectionClassName()\n );\n\n return (\n <Select2Context.Provider value={context}>\n <PopoverPrimitive.Root open={open} onOpenChange={handleOpenChange}>\n <PopoverPrimitive.Trigger\n render={\n <Trigger\n {...otherProps}\n aria-haspopup=\"dialog\"\n // oxlint-disable-next-line taco/data-taco-kebab-case -- established public selector API; renaming it is a breaking change\n data-taco=\"Select2\"\n data-multiple={multiple ? true : undefined}\n emptyValue={emptyValue}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n ref={internalRef}>\n {flattenedChildren}\n </Trigger>\n }\n />\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Positioner\n align=\"start\"\n sideOffset={4}\n collisionAvoidance={{\n side: 'flip',\n fallbackAxisSide: 'none',\n }}>\n <PopoverPrimitive.Popup\n className={className}\n style={{ minWidth: dimensions?.width ? `${dimensions.width}px` : undefined }}\n initialFocus={hasSearch ? searchRef : true}\n finalFocus={handleFinalFocus}\n onKeyDown={handleHorizontalNavigation}\n tabIndex={-1}>\n {hasSearch ? (\n <>\n <Search\n placeholder={hasInlineCreation ? texts.select2.searchOrCreate : texts.select2.search}\n ref={searchRef}\n />\n {multiple && selectOptions.length > 1 && (\n <>\n <LegacyButton\n className=\"!justify-start\"\n appearance=\"discrete\"\n onClick={areAllSelected ? deselectAll : selectAll}>\n {selectAllText}\n </LegacyButton>\n <div className=\"mx-3 rounded border-t border-gray-200\" />\n </>\n )}\n </>\n ) : null}\n {loading ? (\n <span\n className={cn(\n 'flex items-center italic text-gray-700',\n fontSize && FONT_SIZE_CLASSNAME[fontSize]\n )}>\n <span>\n <Spinner\n delay={0}\n className={cn('ml-3 mr-2 mt-1.5 h-5 w-5', {\n '!mt-1 !h-3.5 !w-3.5': fontSize === FontSizes.small,\n '!h-4 !w-4': fontSize === FontSizes.medium,\n '!h-5 !w-5': fontSize === FontSizes.large,\n })}\n />\n </span>\n <span>{texts.listbox.loading}</span>\n </span>\n ) : flattenedChildren.length <= 0 && !onCreate ? (\n <div className=\"-mt-0.5 flex h-8 items-center px-2 text-gray-700\" role=\"presentation\">\n {texts.listbox.empty}\n </div>\n ) : (\n <ListboxPrimitive.Root\n className=\"flex flex-col gap-0.5 focus-visible:outline-none\"\n customSelector=\":scope > button\"\n disabled={disabled}\n multiple={multiple}\n onKeyDown={handleListboxKeyDown}\n readOnly={readOnly}\n ref={listboxRef}\n setValue={setValue}\n value={value}>\n <Collection>{visibleChildren}</Collection>\n {onCreate ? <Create onCreate={onCreate} options={flattenedChildren} /> : null}\n </ListboxPrimitive.Root>\n )}\n </PopoverPrimitive.Popup>\n </PopoverPrimitive.Positioner>\n </PopoverPrimitive.Portal>\n <ControlledHiddenField\n emptyValue={emptyValue}\n multiple={multiple || tags}\n name={name}\n options={flattenedChildren.map(child => child.props.value)}\n parentRef={internalRef}\n setValue={setValue}\n value={value}\n />\n </PopoverPrimitive.Root>\n </Select2Context.Provider>\n );\n}\n\nexport const Select2 = Object.assign(fixedForwardRef(_Select2Inner), {\n Option,\n Group,\n Title,\n displayName: 'Select2',\n});\n\ntype ControlledHiddenFieldProps = {\n emptyValue: ListboxPrimitive.Listbox2OptionValue | undefined;\n multiple: boolean;\n name: string | undefined;\n options: Select2OptionValue[];\n parentRef: React.RefObject<HTMLButtonElement | null>;\n setValue: (nextValue: Select2Value | undefined) => void;\n value: Select2Value | undefined;\n};\n\nconst ControlledHiddenField = (props: ControlledHiddenFieldProps) => {\n const { emptyValue, multiple, name, options, parentRef, value, setValue } = props;\n const isFormControl = useIsFormControl(parentRef, () => setValue(multiple ? [] : undefined));\n\n let bubbleValue;\n\n if (isFormControl) {\n if (value !== undefined) {\n if (multiple) {\n bubbleValue = Array.isArray(value) ? value.map(String) : [value === null ? '' : String(value)];\n } else {\n bubbleValue = value === null ? '' : String(value);\n }\n }\n\n return (\n <BubbleSelect aria-hidden key={String(bubbleValue)} multiple={multiple} name={name} tabIndex={-1} value={bubbleValue}>\n {emptyValue === undefined ? null : <option value={emptyValue === null ? '' : String(emptyValue)} />}\n {options.map(option => (\n <option key={String(option)} value={String(option)} />\n ))}\n </BubbleSelect>\n );\n }\n\n return null;\n};\n\nexport type {\n Select2Texts,\n Select2Child,\n Select2GroupProps,\n Select2OptionProps,\n Select2OptionValue,\n Select2Value,\n Select2Props,\n Select2TitleProps,\n Select2Children,\n};\n"],"names":["Option","useMergedRef","useLocalization","useBoundingClientRectListener","useControlled","ListboxPrimitive.createListboxValueSetter","useIsHoverStatePaused","useChildren","isGroup","debounce","filterOption","isElementInsideTable3OrReport","isAriaDirectionKey","createCustomKeyboardEvent","open","getNextFocussableElement","createCollectionClassName","Select2Context","PopoverPrimitive","Trigger","Search","LegacyButton","FONT_SIZE_CLASSNAME","Spinner","FontSizes","ListboxPrimitive.Root","Collection","Create","fixedForwardRef","Group","Title","useIsFormControl","BubbleSelect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoHA,SAAS,cAAc,OAAqB,KAAsD;AAC9F,QAAM;AAAA,IACF,UAAU;AAAA,IACV;AAAA,IACA,WAAW;AAAA,IACX,aAAa;AAAA,IACb;AAAA,IACA,cAAc;AAAA,IACd,UAAU;AAAA,IACV;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,OAAO;AAAA,IACP,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EAAA,IACH;AAEJ,QAAM,cAAkE,MAAM,QAAQ,MAAM;AACxF,QAAI,eAAe,UAAa,CAAC,UAAU;AAEvC,aAAO,sBAAA,cAACA,iBAAO,KAAI,WAAU,UAAS,IAAG,OAAO,YAAY,WAAU,MAAA,CAAM;AAAA,IAChF;AAEA,WAAO;AAAA,EACX,GAAG,CAAC,YAAY,QAAQ,CAAC;AAEzB,QAAM,kBAAkB,MAAM,QAAQ,MAAM;AAExC,UAAM,WAAW,MAAM,SAAS,QAAQ,YAAY,EAAE;AAAA,MAAO,CAAC,UAC1D,MAAM,eAAe,KAAK;AAAA,IAAA;AAG9B,WAAO,cAAc,CAAC,aAAa,GAAG,QAAQ,IAAI;AAAA,EACtD,GAAG,CAAC,aAAa,YAAY,CAAC;AAG9B,QAAM,cAAcC,aAAAA,aAAgC,GAAG;AACvD,QAAM,aAAa,MAAM,OAAsB,IAAI;AACnD,QAAM,YAAY,MAAM,OAAyB,IAAI;AACrD,QAAM,EAAE,MAAA,IAAUC,6BAAA;AAElB,QAAM,aAAaC,8BAAAA,8BAA8B,WAAW;AAG5D,QAAM,CAAC,MAAM,OAAO,IAAI,MAAM,SAAS,KAAK;AAC5C,QAAM,CAAC,OAAO,SAAS,IAAIC,4BAA4B;AAAA;AAAA,IAEnD;AAAA;AAAA,IAEA;AAAA,IACA,OAAO;AAAA,EAAA,CACV;AACD,QAAM,WAAWC,KAAAA;AAAAA,IACb;AAAA;AAAA;AAAA,IAGA;AAAA,EAAA;AAEJ,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,MAAM,SAAA;AACpD,QAAM,CAAC,uBAAuB,wBAAwB,IAAIC,4CAAA;AAE1D,QAAM,EAAE,mBAAmB,kBAAkB,aAAa,eAAA,IAAmBC,YAAAA,YAAY;AAAA,IACrF,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACH;AAGD,QAAM,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,KAAK;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGJ,QAAM,oBAAoB,YAAY,CAAC;AACvC,QAAM,YAAY,kBAAkB,SAAS,KAAK;AAClD,QAAM,kBAAkB,gBAAgB,KAAK,kBAAkB;AAC/D,QAAM,gBACF,gBAAgB,KACV,kBAAkB,IAAI,CAAA,UAAS,MAAM,MAAM,KAAK,IAChD,iBAAiB,QAAQ,CAAA,UAAS;AAC9B,QAAIC,YAAAA,QAAQ,KAAK,GAAG;AAChB,aAAO,MAAM,QAAQ,MAAM,MAAM,QAAQ,IACnC,MAAM,MAAM,SAAS,IAAI,CAAA,aAAY,SAAS,MAAM,KAAK,IACzD,CAAA;AAAA,IACV;AACA,WAAO,MAAM,MAAM;AAAA,EACvB,CAAC;AAGX,QAAM,kBAAkB,MAAM,OAAO,EAAE;AAEvC,QAAM,YAAYC,SAAAA,SAAS,WAAY;AACnC,QAAI,CAAC,gBAAgB,SAAS;AAC1B;AAAA,IACJ;AAIA,UAAM,oBAAoB,kBAAkB,UAAU,CAAA,UAASC,UAAAA,aAAa,OAAO,gBAAgB,OAAO,CAAC;AAE3G,QAAI,oBAAoB,MAAM,cAAc,iBAAiB,MAAM,QAAW;AAC1E,eAAS,cAAc,iBAAiB,CAAC;AAAA,IAC7C;AAEA,oBAAgB,UAAU;AAAA,EAC9B,GAAG,GAAG;AAEN,QAAM,oBAAoB,CAAC,UAAkB;AACzC,oBAAgB,UAAU,gBAAgB,UAAU;AACpD,cAAA;AAAA,EACJ;AAEA,QAAM,gBAAgB,CAAC,UAA4C;AAC/D,QAAI,MAAM;AACN,YAAM,eAAA;AAAA,IACV,WAAWC,IAAAA,8BAA8B,MAAM,aAAa,KAAKC,KAAAA,mBAAmB,KAAK,GAAG;AACxF;AAAA,IACJ,WAAW,CAAC,MAAM,WAAW,CAAC,MAAM,YAAY,MAAM,QAAQ,eAAe,eAAe,KAAK,MAAM,GAAG,IAAI;AAC1G,cAAQ,IAAI;AAEZ,UAAI,CAAC,WAAW;AACZ,0BAAkB,MAAM,GAAG;AAAA,MAC/B;AAAA,IACJ;AAGA,QAAI,aAAa,eAAe,KAAK,MAAM,GAAG,GAAG;AAC7C,qBAAe,CAAA,SAAQ,OAAO,MAAM,GAAG;AAAA,IAC3C;AAGA,eAAW,SAAS,cAAcC,MAAAA,0BAA0B,KAAK,CAAC;AAAA,EACtE;AAEA,QAAM,qBAAqB,MAAM,OAA2B,MAAS;AAErE,QAAM,6BAA6B,CAAC,UAA+C;AAC/E,QAAIF,IAAAA,8BAA8B,YAAY,OAAO,GAAG;AACpD,YAAM,yBAAyB,MAAM,kBAAkB,QAAQ,MAAM,cAAc,WAAW,MAAM,MAAM;AAE1G,WAAK,MAAM,QAAQ,eAAe,MAAM,QAAQ,iBAAiB,wBAAwB;AAErF,cAAM,eAAA;AACN,cAAM,gBAAA;AAEN,2BAAmB,UAAU,MAAM,QAAQ,cAAc,KAAK;AAC9D,gBAAQ,KAAK;AAAA,MACjB;AAAA,IACJ;AAAA,EACJ;AAEA,QAAM,uBAAuB,CAAC,UAA4C;AACtE,QAAIC,KAAAA,mBAAmB,KAAK,GAAG;AAC3B,+BAAyB,IAAI;AAC7B;AAAA,IACJ;AAEA,QAAI,MAAM,QAAQ,OAAO;AACrB,yBAAmB,UAAU,MAAM,WAAW,KAAK;AACnD,cAAQ,KAAK;AACb;AAAA,IACJ;AAGA,QAAI,CAAC,aAAa,MAAM,QAAQ,UAAU;AACtC,YAAM,eAAA;AACN,YAAM,gBAAA;AACN,cAAQ,KAAK;AACb;AAAA,IACJ;AAGA,QAAI,CAAC,aAAa,eAAe,KAAK,MAAM,GAAG,GAAG;AAC9C,wBAAkB,MAAM,GAAG;AAAA,IAC/B;AAAA,EACJ;AAEA,QAAM,mBAAmB,CAACE,OAAe,YAA8C;AACnF,QAAI,CAACA,UAAS,QAAQ,WAAW,mBAAmB,QAAQ,WAAW,cAAc;AACjF,iBAAW,SAAS,QAAQ,KAAuD;AAAA,IACvF;AACA,YAAQA,KAAI;AAAA,EAChB;AAEA,QAAM,mBAAmB,CAAC,cAA2D;AACjF,QAAI,mBAAmB,YAAY,QAAW;AAC1C,YAAM,KAAKC,IAAAA,yBAAyB,YAAY,SAAS,mBAAmB,OAAO;AACnF,yBAAmB,UAAU;AAC7B,aAAO,MAAM;AAAA,IACjB;AACA,QAAI,cAAc,WAAW,cAAc,SAAS;AAEhD,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AACA,QAAM,iBAAiB,MAAM,QAAQ,KAAK,KAAK,cAAc,MAAM,CAAA,WAAU,MAAM,SAAS,MAAM,CAAC;AAEnG,QAAM,gBAAgB,MAAM,QAAQ,MAAM;AACtC,QAAI,gBAAgB,IAAI;AACpB,UAAI,gBAAgB;AAChB,eAAO,MAAM,QAAQ;AAAA,MACzB;AACA,aAAO,MAAM,QAAQ;AAAA,IACzB;AAEA,QAAI,gBAAgB;AAChB,aAAO,MAAM,QAAQ;AAAA,IACzB;AAEA,WAAO,MAAM,QAAQ;AAAA,EACzB,GAAG,CAAC,gBAAgB,WAAW,CAAC;AAEhC,QAAM,YAAY,MAAM;AACpB,QAAI,CAAC,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW,GAAG;AAC7C,eAAS,aAAa;AAAA,IAC1B,OAAO;AAEH,YAAM,oBAAoB,cAAc,OAAO,CAAA,WAAU,CAAC,MAAM,SAAS,MAAM,CAAC;AAChF,eAAS,CAAC,GAAG,OAAO,GAAG,iBAAiB,CAAC;AAAA,IAC7C;AAAA,EACJ;AAEA,QAAM,cAAc,MAAM;AACtB,QAAI,gBAAgB,IAAI;AACpB,eAAS,CAAA,CAAE;AAAA,IACf,OAAO;AACH,YAAM,YAAY,MAAM,QAAQ,KAAK,KAAK,MAAM,OAAO,CAAA,aAAY,CAAC,cAAc,SAAS,QAAQ,CAAC;AACpG,eAAS,SAAS;AAAA,IACtB;AAAA,EACJ;AAEA,QAAM,YAAY;AAAA,IACd;AAAA,IACA;AAAA,MACI,yBAAyB,CAAC;AAAA,MAC1B,gBAAgB;AAAA,IAAA;AAAA,IAEpBC,UAAAA,0BAAA;AAAA,EAA0B;AAG9B,SACI,sBAAA,cAACC,QAAAA,eAAe,UAAf,EAAwB,OAAO,WAC5B,sBAAA,cAACC,QAAAA,QAAiB,MAAjB,EAAsB,MAAY,cAAc,iBAAA,GAC7C,sBAAA;AAAA,IAACA,QAAAA,QAAiB;AAAA,IAAjB;AAAA,MACG,QACI,sBAAA;AAAA,QAACC,QAAAA;AAAAA,QAAA;AAAA,UACI,GAAG;AAAA,UACJ,iBAAc;AAAA,UAEd,aAAU;AAAA,UACV,iBAAe,WAAW,OAAO;AAAA,UACjC;AAAA,UACA,WAAW;AAAA,UACX;AAAA,UACA,KAAK;AAAA,QAAA;AAAA,QACJ;AAAA,MAAA;AAAA,IACL;AAAA,EAAA,GAGR,sBAAA,cAACD,QAAAA,QAAiB,QAAjB,MACG,sBAAA;AAAA,IAACA,QAAAA,QAAiB;AAAA,IAAjB;AAAA,MACG,OAAM;AAAA,MACN,YAAY;AAAA,MACZ,oBAAoB;AAAA,QAChB,MAAM;AAAA,QACN,kBAAkB;AAAA,MAAA;AAAA,IACtB;AAAA,IACA,sBAAA;AAAA,MAACA,QAAAA,QAAiB;AAAA,MAAjB;AAAA,QACG;AAAA,QACA,OAAO,EAAE,UAAU,YAAY,QAAQ,GAAG,WAAW,KAAK,OAAO,OAAA;AAAA,QACjE,cAAc,YAAY,YAAY;AAAA,QACtC,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,UAAU;AAAA,MAAA;AAAA,MACT,YACG,sBAAA,cAAA,MAAA,UAAA,MACI,sBAAA;AAAA,QAACE,OAAAA;AAAAA,QAAA;AAAA,UACG,aAAa,oBAAoB,MAAM,QAAQ,iBAAiB,MAAM,QAAQ;AAAA,UAC9E,KAAK;AAAA,QAAA;AAAA,MAAA,GAER,YAAY,cAAc,SAAS,KAChC,sBAAA,cAAA,MAAA,UAAA,MACI,sBAAA;AAAA,QAACC,OAAAA;AAAAA,QAAA;AAAA,UACG,WAAU;AAAA,UACV,YAAW;AAAA,UACX,SAAS,iBAAiB,cAAc;AAAA,QAAA;AAAA,QACvC;AAAA,MAAA,GAEL,sBAAA,cAAC,OAAA,EAAI,WAAU,wCAAA,CAAwC,CAC3D,CAER,IACA;AAAA,MACH,UACG,sBAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,WAAW;AAAA,YACP;AAAA,YACA,YAAYC,UAAAA,oBAAoB,QAAQ;AAAA,UAAA;AAAA,QAC5C;AAAA,4CACC,QAAA,MACG,sBAAA;AAAA,UAACC,QAAAA;AAAAA,UAAA;AAAA,YACG,OAAO;AAAA,YACP,WAAW,GAAG,4BAA4B;AAAA,cACtC,uBAAuB,aAAaC,MAAAA,UAAU;AAAA,cAC9C,aAAa,aAAaA,MAAAA,UAAU;AAAA,cACpC,aAAa,aAAaA,gBAAU;AAAA,YAAA,CACvC;AAAA,UAAA;AAAA,QAAA,CAET;AAAA,QACA,sBAAA,cAAC,QAAA,MAAM,MAAM,QAAQ,OAAQ;AAAA,MAAA,IAEjC,kBAAkB,UAAU,KAAK,CAAC,WAClC,sBAAA,cAAC,OAAA,EAAI,WAAU,oDAAmD,MAAK,kBAClE,MAAM,QAAQ,KACnB,IAEA,sBAAA;AAAA,QAACC,KAAAA;AAAAA,QAAA;AAAA,UACG,WAAU;AAAA,UACV,gBAAe;AAAA,UACf;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UACX;AAAA,UACA,KAAK;AAAA,UACL;AAAA,UACA;AAAA,QAAA;AAAA,QACA,sBAAA,cAACC,6BAAY,eAAgB;AAAA,QAC5B,WAAW,sBAAA,cAACC,OAAAA,QAAA,EAAO,UAAoB,SAAS,mBAAmB,IAAK;AAAA,MAAA;AAAA,IAC7E;AAAA,EAER,CAER,GACA,sBAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACG;AAAA,MACA,UAAU,YAAY;AAAA,MACtB;AAAA,MACA,SAAS,kBAAkB,IAAI,CAAA,UAAS,MAAM,MAAM,KAAK;AAAA,MACzD,WAAW;AAAA,MACX;AAAA,MACA;AAAA,IAAA;AAAA,EAAA,CAER,CACJ;AAER;AAEO,MAAM,UAAU,OAAO,OAAOC,MAAAA,gBAAgB,aAAa,GAAG;AAAA,EAAA,QACjE5B,OAAAA;AAAAA,EAAA,OACA6B,MAAAA;AAAAA,EAAA,OACAC,MAAAA;AAAAA,EACA,aAAa;AACjB,CAAC;AAYD,MAAM,wBAAwB,CAAC,UAAsC;AACjE,QAAM,EAAE,YAAY,UAAU,MAAM,SAAS,WAAW,OAAO,aAAa;AAC5E,QAAM,gBAAgBC,iBAAAA,iBAAiB,WAAW,MAAM,SAAS,WAAW,CAAA,IAAK,MAAS,CAAC;AAE3F,MAAI;AAEJ,MAAI,eAAe;AACf,QAAI,UAAU,QAAW;AACrB,UAAI,UAAU;AACV,sBAAc,MAAM,QAAQ,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,CAAC,UAAU,OAAO,KAAK,OAAO,KAAK,CAAC;AAAA,MACjG,OAAO;AACH,sBAAc,UAAU,OAAO,KAAK,OAAO,KAAK;AAAA,MACpD;AAAA,IACJ;AAEA,+CACKC,aAAAA,cAAA,EAAa,eAAW,MAAC,KAAK,OAAO,WAAW,GAAG,UAAoB,MAAY,UAAU,IAAI,OAAO,eACpG,eAAe,SAAY,2CAAQ,UAAA,EAAO,OAAO,eAAe,OAAO,KAAK,OAAO,UAAU,GAAG,GAChG,QAAQ,IAAI,CAAA,WACT,sBAAA,cAAC,YAAO,KAAK,OAAO,MAAM,GAAG,OAAO,OAAO,MAAM,EAAA,CAAG,CACvD,CACL;AAAA,EAER;AAEA,SAAO;AACX;;"}
1
+ {"version":3,"file":"Select2.cjs","sources":["../../../src/components/Select2/Select2.tsx"],"sourcesContent":["import { Popover as PopoverPrimitive } from '@base-ui/react/popover';\nimport cn from 'clsx';\nimport React from 'react';\n\nimport { LegacyButton, Spinner, useLocalization } from '@/components';\nimport { useBoundingClientRectListener } from '@/hooks/useBoundingClientRectListener';\nimport { useControlled } from '@/hooks/useControlled';\nimport { useIsFormControl } from '@/hooks/useIsFormControl';\nimport { useIsHoverStatePaused } from '@/hooks/useIsHoverStatePaused';\nimport { useMergedRef } from '@/hooks/useMergedRef';\nimport { BubbleSelect } from '@/primitives/BubbleSelect';\nimport type { CollectionRef } from '@/primitives/Collection/Collection';\nimport * as ListboxPrimitive from '@/primitives/Listbox2/Listbox2';\nimport type { FontSize } from '@/types';\nimport { fixedForwardRef, FontSizes } from '@/types';\nimport { isAriaDirectionKey } from '@/utils/aria';\nimport { debounce } from '@/utils/debounce';\nimport { getNextFocussableElement, isElementInsideTable3OrReport } from '@/utils/dom';\nimport { createCustomKeyboardEvent } from '@/utils/input';\n\nimport { Collection } from './components/Collection';\nimport { Select2Context } from './components/Context';\nimport { Create } from './components/Create';\nimport type { Select2GroupProps } from './components/Group';\nimport { Group } from './components/Group';\nimport type { Select2OptionProps } from './components/Option';\nimport { Option } from './components/Option';\nimport { Search } from './components/Search';\nimport type { Select2TitleProps } from './components/Title';\nimport { Title } from './components/Title';\nimport { Trigger } from './components/Trigger';\nimport { isGroup, useChildren } from './hooks/useChildren';\nimport type {\n Select2Child,\n Select2Children,\n Select2CreateHandler,\n Select2CreateDialogRenderer,\n Select2DeleteHandler,\n Select2EditHandler,\n Select2OptionValue,\n Select2Value,\n} from './types';\nimport { createCollectionClassName, filterOption, FONT_SIZE_CLASSNAME } from './utilities';\n\ntype Select2Texts = {\n allSelect: string;\n allDeselect: string;\n cancel: string;\n chooseColor: string;\n create: string;\n delete: string;\n save: string;\n search: string;\n searchOrCreate: string;\n selectAll: string;\n selectAllResults: string;\n deselectAll: string;\n deselectAllResults: string;\n};\n\ntype Select2Props<T extends Select2Value = Select2Value> = Omit<\n React.HTMLAttributes<HTMLButtonElement>,\n 'children' | 'defaultValue' | 'onChange' | 'value'\n> & {\n /** Autofocus Select2 when loaded **/\n autoFocus?: boolean;\n /** Array of options in Select2 */\n children: Select2Children;\n /** Initial value of the input in Select2 */\n defaultValue?: T;\n /** Set what value should have an empty option in Select2 */\n emptyValue?: Extract<T, Select2OptionValue>;\n /** Whether the Select2 is in a disabled state **/\n disabled?: boolean;\n /** Font size of text in Select2 **/\n fontSize?: FontSize;\n /** Draws attention to the Select2 by changing its style and making it visually prominent */\n highlighted?: boolean;\n /** Whether the Select2 is in an invalid state **/\n invalid?: boolean;\n /** Whether the Select2 is loading the data **/\n loading?: boolean;\n /** Whether the Select2 allows selecting multiple values **/\n multiple?: boolean;\n /** Whether the Select2 is in an invalid state **/\n name?: string;\n /** Handler called when user chooses an option from the provided options **/\n onChange?: (value: T) => void;\n /** Handler called when user creates a new option **/\n onCreate?: Select2CreateHandler;\n /** Handler called when user deletes an option **/\n onDelete?: Select2DeleteHandler;\n /** Handler called when user edits an option **/\n onEdit?: Select2EditHandler;\n /** Placeholder showed when nothing is selected **/\n placeholder?: string;\n /** Whether the Select2 is in a readonly state **/\n readOnly?: boolean;\n required?: boolean;\n /** Renders select options as tags **/\n tags?: boolean;\n /** Value of the input in select2 */\n value?: T;\n /** Create dialog component, if specified, then create button will become always visible in the bottom of options dropdown,\n * when clicked, it will open create dialog and wait for 'onCreate' handler to be triggered from the dialog */\n createDialog?: Select2CreateDialogRenderer;\n /** Create button text */\n createTriggerText?: string;\n};\n\n// generic overload is the public face; the wide implementation signature lets the internals\n// (which all operate on Select2Value) consume the props without assertions\nfunction _Select2Inner<T extends Select2Value = Select2Value>(\n props: Select2Props<T>,\n ref: React.Ref<HTMLButtonElement>\n): React.JSX.Element;\nfunction _Select2Inner(props: Select2Props, ref: React.Ref<HTMLButtonElement>): React.JSX.Element {\n const {\n children: initChildren,\n defaultValue,\n disabled = false,\n emptyValue = undefined,\n fontSize,\n highlighted = false,\n invalid = false,\n loading,\n multiple = false,\n name,\n onChange,\n onCreate,\n onDelete,\n onEdit,\n placeholder,\n readOnly = false,\n tags = false,\n value: prop,\n createDialog,\n createTriggerText,\n ...otherProps\n } = props;\n\n const emptyOption: React.ReactElement<Select2OptionProps> | undefined = React.useMemo(() => {\n if (emptyValue !== undefined && !multiple) {\n // Empty option has 0px height, because it's empty, so need to apply height manually\n return <Option key=\"__empty\" children=\"\" value={emptyValue} className=\"h-8\" />;\n }\n\n return undefined;\n }, [emptyValue, multiple]);\n\n const initialChildren = React.useMemo(() => {\n // flatten nested arrays from maps and strip conditionals (false/null) so the internals see a flat list\n const children = React.Children.toArray(initChildren).filter((child): child is Select2Child =>\n React.isValidElement(child)\n );\n\n return emptyOption ? [emptyOption, ...children] : children;\n }, [emptyOption, initChildren]);\n\n // refs\n const internalRef = useMergedRef<HTMLButtonElement>(ref);\n const listboxRef = React.useRef<CollectionRef>(null);\n const searchRef = React.useRef<HTMLInputElement>(null);\n const { texts } = useLocalization();\n // align the listbox min width with the width of the input - it should never be smaller\n const dimensions = useBoundingClientRectListener(internalRef);\n\n // state\n const [open, setOpen] = React.useState(false);\n const [value, _setValue] = useControlled<Select2Value>({\n // uncontrolled\n defaultValue,\n // controlled\n onChange,\n value: prop,\n });\n const setValue = ListboxPrimitive.createListboxValueSetter(\n multiple,\n // the state can genuinely become undefined (form reset), but widening `useControlled` to\n // `Select2Value | undefined` would require onChange to accept `undefined` — a breaking API change\n _setValue as React.Dispatch<React.SetStateAction<Select2Value | undefined>>\n );\n const [validationError, setValidationError] = React.useState<Error | undefined>();\n const [shouldPauseHoverState, setShouldPauseHoverState] = useIsHoverStatePaused();\n\n const { flattenedChildren, filteredChildren, searchQuery, setSearchQuery } = useChildren({\n children: initialChildren,\n emptyValue,\n multiple,\n open,\n setValue,\n value,\n });\n\n // context\n const context = {\n disabled,\n highlighted,\n invalid,\n listboxRef,\n multiple,\n onCreate,\n onDelete,\n onEdit,\n open,\n readOnly,\n ref: internalRef,\n searchQuery,\n searchRef,\n setOpen,\n setSearchQuery,\n setValidationError,\n setValue,\n shouldPauseHoverState,\n setShouldPauseHoverState,\n tags,\n fontSize,\n validationError,\n value,\n createDialog,\n createTriggerText,\n };\n\n const hasInlineCreation = onCreate && !createDialog;\n const hasSearch = flattenedChildren.length > 5 || hasInlineCreation;\n const visibleChildren = searchQuery === '' ? initialChildren : filteredChildren;\n const selectOptions =\n searchQuery === ''\n ? flattenedChildren.map(child => child.props.value)\n : filteredChildren.flatMap(child => {\n if (isGroup(child)) {\n return Array.isArray(child.props.children)\n ? child.props.children.map(subChild => subChild.props.value)\n : [];\n }\n return child.props.value;\n });\n\n // support typeahead functionality when search isn't available\n const queryTimeoutRef = React.useRef('');\n\n const typeahead = debounce(function () {\n if (!queryTimeoutRef.current) {\n return;\n }\n\n // match against the flattened list — selectOptions is flattened too, so indices\n // stay aligned when groups are present, and group members can be matched\n const matchedValueIndex = flattenedChildren.findIndex(child => filterOption(child, queryTimeoutRef.current));\n\n if (matchedValueIndex > -1 && selectOptions[matchedValueIndex] !== undefined) {\n setValue(selectOptions[matchedValueIndex]);\n }\n\n queryTimeoutRef.current = '';\n }, 200);\n\n const setValueIfMatched = (query: string) => {\n queryTimeoutRef.current = queryTimeoutRef.current + query;\n typeahead();\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n if (open) {\n event.preventDefault();\n } else if (isElementInsideTable3OrReport(event.currentTarget) && isAriaDirectionKey(event)) {\n return;\n } else if (!event.ctrlKey && !event.metaKey && (event.key === 'ArrowDown' || /^[a-z0-9]$/iu.test(event.key))) {\n setOpen(true);\n\n if (!hasSearch) {\n setValueIfMatched(event.key);\n }\n }\n\n // Collect the first character when opening with keyboard (when user starts typing while focused on a trigger)\n if (hasSearch && /^[a-z0-9]$/iu.test(event.key)) {\n setSearchQuery(prev => prev + event.key);\n }\n\n // the focus should always remain on the input, so we forward events on to the listbox\n listboxRef.current?.dispatchEvent(createCustomKeyboardEvent(event));\n };\n\n const shouldFocusNextRef = React.useRef<number | undefined>(undefined);\n\n const handleHorizontalNavigation = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (isElementInsideTable3OrReport(internalRef.current)) {\n const isTriggeredFromPopover = event.target instanceof Node && event.currentTarget.contains?.(event.target);\n\n if ((event.key === 'ArrowLeft' || event.key === 'ArrowRight') && isTriggeredFromPopover) {\n // prevents scrolling horizontally in the table on arrow left/right.\n event.preventDefault();\n event.stopPropagation();\n\n shouldFocusNextRef.current = event.key === 'ArrowLeft' ? -1 : +1;\n setOpen(false);\n }\n }\n };\n\n const handleListboxKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n if (isAriaDirectionKey(event)) {\n setShouldPauseHoverState(true);\n return;\n }\n\n if (event.key === 'Tab') {\n shouldFocusNextRef.current = event.shiftKey ? -1 : +1;\n setOpen(false);\n return;\n }\n\n // Handle Escape key to close the select without closing the parent dialog\n if (!hasSearch && event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n setOpen(false);\n return;\n }\n\n // support typeahead to set the value by typing its text\n if (!hasSearch && /^[a-z0-9]$/iu.test(event.key)) {\n setValueIfMatched(event.key);\n }\n };\n\n const handleOpenChange = (open: boolean, details: { reason: string; event: Event }) => {\n if (!open && (details.reason === 'outside-press' || details.reason === 'focus-out')) {\n otherProps.onBlur?.(details.event as unknown as React.FocusEvent<HTMLButtonElement>);\n }\n setOpen(open);\n };\n\n const handleFinalFocus = (closeType: 'mouse' | 'touch' | 'keyboard' | 'pen' | '') => {\n if (shouldFocusNextRef.current !== undefined) {\n const el = getNextFocussableElement(internalRef.current, shouldFocusNextRef.current);\n shouldFocusNextRef.current = undefined;\n return el || false;\n }\n if (closeType === 'mouse' || closeType === 'touch') {\n // Don't steal focus — the clicked element receives it naturally.\n return false;\n }\n return true;\n };\n const areAllSelected = Array.isArray(value) && selectOptions.every(option => value.includes(option));\n\n const selectAllText = React.useMemo(() => {\n if (searchQuery === '') {\n if (areAllSelected) {\n return texts.select2.deselectAll;\n }\n return texts.select2.selectAll;\n }\n\n if (areAllSelected) {\n return texts.select2.deselectAllResults;\n }\n\n return texts.select2.selectAllResults;\n }, [areAllSelected, searchQuery]);\n\n const selectAll = () => {\n if (!Array.isArray(value) || value.length === 0) {\n setValue(selectOptions);\n } else {\n // array of all available options which are not selected\n const preselectedValues = selectOptions.filter(option => !value.includes(option));\n setValue([...value, ...preselectedValues]);\n }\n };\n\n const deselectAll = () => {\n if (searchQuery === '') {\n setValue([]);\n } else {\n const nextValue = Array.isArray(value) && value.filter(subValue => !selectOptions.includes(subValue));\n setValue(nextValue);\n }\n };\n\n const className = cn(\n 'rounded border border-gray-300 bg-white py-1.5 shadow-md',\n {\n 'focus-within:yt-focus': !hasSearch,\n 'outline-none': hasSearch,\n },\n createCollectionClassName()\n );\n\n return (\n <Select2Context.Provider value={context}>\n <PopoverPrimitive.Root open={open} onOpenChange={handleOpenChange}>\n <PopoverPrimitive.Trigger\n render={\n <Trigger\n {...otherProps}\n aria-haspopup=\"listbox\"\n aria-multiselectable={multiple}\n // oxlint-disable-next-line taco/data-taco-kebab-case -- established public selector API; renaming it is a breaking change\n data-taco=\"Select2\"\n emptyValue={emptyValue}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n ref={internalRef}>\n {flattenedChildren}\n </Trigger>\n }\n />\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Positioner\n align=\"start\"\n sideOffset={4}\n collisionAvoidance={{\n side: 'flip',\n fallbackAxisSide: 'none',\n }}>\n <PopoverPrimitive.Popup\n className={className}\n style={{ minWidth: dimensions?.width ? `${dimensions.width}px` : undefined }}\n initialFocus={hasSearch ? searchRef : true}\n finalFocus={handleFinalFocus}\n onKeyDown={handleHorizontalNavigation}\n tabIndex={-1}>\n {hasSearch ? (\n <>\n <Search\n placeholder={hasInlineCreation ? texts.select2.searchOrCreate : texts.select2.search}\n ref={searchRef}\n />\n {multiple && selectOptions.length > 1 && (\n <>\n <LegacyButton\n className=\"!justify-start\"\n appearance=\"discrete\"\n onClick={areAllSelected ? deselectAll : selectAll}>\n {selectAllText}\n </LegacyButton>\n <div className=\"mx-3 rounded border-t border-gray-200\" />\n </>\n )}\n </>\n ) : null}\n {loading ? (\n <span\n className={cn(\n 'flex items-center italic text-gray-700',\n fontSize && FONT_SIZE_CLASSNAME[fontSize]\n )}>\n <span>\n <Spinner\n delay={0}\n className={cn('ml-3 mr-2 mt-1.5 h-5 w-5', {\n '!mt-1 !h-3.5 !w-3.5': fontSize === FontSizes.small,\n '!h-4 !w-4': fontSize === FontSizes.medium,\n '!h-5 !w-5': fontSize === FontSizes.large,\n })}\n />\n </span>\n <span>{texts.listbox.loading}</span>\n </span>\n ) : flattenedChildren.length <= 0 && !onCreate ? (\n <div className=\"-mt-0.5 flex h-8 items-center px-2 text-gray-700\" role=\"presentation\">\n {texts.listbox.empty}\n </div>\n ) : (\n <ListboxPrimitive.Root\n className=\"flex flex-col gap-0.5 focus-visible:outline-none\"\n customSelector=\":scope > button\"\n disabled={disabled}\n multiple={multiple}\n onKeyDown={handleListboxKeyDown}\n readOnly={readOnly}\n ref={listboxRef}\n setValue={setValue}\n value={value}>\n <Collection>{visibleChildren}</Collection>\n {onCreate ? <Create onCreate={onCreate} options={flattenedChildren} /> : null}\n </ListboxPrimitive.Root>\n )}\n </PopoverPrimitive.Popup>\n </PopoverPrimitive.Positioner>\n </PopoverPrimitive.Portal>\n <ControlledHiddenField\n emptyValue={emptyValue}\n multiple={multiple || tags}\n name={name}\n options={flattenedChildren.map(child => child.props.value)}\n parentRef={internalRef}\n setValue={setValue}\n value={value}\n />\n </PopoverPrimitive.Root>\n </Select2Context.Provider>\n );\n}\n\nexport const Select2 = Object.assign(fixedForwardRef(_Select2Inner), {\n Option,\n Group,\n Title,\n displayName: 'Select2',\n});\n\ntype ControlledHiddenFieldProps = {\n emptyValue: ListboxPrimitive.Listbox2OptionValue | undefined;\n multiple: boolean;\n name: string | undefined;\n options: Select2OptionValue[];\n parentRef: React.RefObject<HTMLButtonElement | null>;\n setValue: (nextValue: Select2Value | undefined) => void;\n value: Select2Value | undefined;\n};\n\nconst ControlledHiddenField = (props: ControlledHiddenFieldProps) => {\n const { emptyValue, multiple, name, options, parentRef, value, setValue } = props;\n const isFormControl = useIsFormControl(parentRef, () => setValue(multiple ? [] : undefined));\n\n let bubbleValue;\n\n if (isFormControl) {\n if (value !== undefined) {\n if (multiple) {\n bubbleValue = Array.isArray(value) ? value.map(String) : [value === null ? '' : String(value)];\n } else {\n bubbleValue = value === null ? '' : String(value);\n }\n }\n\n return (\n <BubbleSelect aria-hidden key={String(bubbleValue)} multiple={multiple} name={name} tabIndex={-1} value={bubbleValue}>\n {emptyValue === undefined ? null : <option value={emptyValue === null ? '' : String(emptyValue)} />}\n {options.map(option => (\n <option key={String(option)} value={String(option)} />\n ))}\n </BubbleSelect>\n );\n }\n\n return null;\n};\n\nexport type {\n Select2Texts,\n Select2Child,\n Select2GroupProps,\n Select2OptionProps,\n Select2OptionValue,\n Select2Value,\n Select2Props,\n Select2TitleProps,\n Select2Children,\n};\n"],"names":["Option","useMergedRef","useLocalization","useBoundingClientRectListener","useControlled","ListboxPrimitive.createListboxValueSetter","useIsHoverStatePaused","useChildren","isGroup","debounce","filterOption","isElementInsideTable3OrReport","isAriaDirectionKey","createCustomKeyboardEvent","open","getNextFocussableElement","createCollectionClassName","Select2Context","PopoverPrimitive","Trigger","Search","LegacyButton","FONT_SIZE_CLASSNAME","Spinner","FontSizes","ListboxPrimitive.Root","Collection","Create","fixedForwardRef","Group","Title","useIsFormControl","BubbleSelect"],"mappings":"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"}
@@ -251,9 +251,9 @@ function _Select2Inner(props, ref) {
251
251
  Trigger,
252
252
  {
253
253
  ...otherProps,
254
- "aria-haspopup": "dialog",
254
+ "aria-haspopup": "listbox",
255
+ "aria-multiselectable": multiple,
255
256
  "data-taco": "Select2",
256
- "data-multiple": multiple ? true : void 0,
257
257
  emptyValue,
258
258
  onKeyDown: handleKeyDown,
259
259
  placeholder,
@@ -1 +1 @@
1
- {"version":3,"file":"Select2.js","sources":["../../../src/components/Select2/Select2.tsx"],"sourcesContent":["import { Popover as PopoverPrimitive } from '@base-ui/react/popover';\nimport cn from 'clsx';\nimport React from 'react';\n\nimport { LegacyButton, Spinner, useLocalization } from '@/components';\nimport { useBoundingClientRectListener } from '@/hooks/useBoundingClientRectListener';\nimport { useControlled } from '@/hooks/useControlled';\nimport { useIsFormControl } from '@/hooks/useIsFormControl';\nimport { useIsHoverStatePaused } from '@/hooks/useIsHoverStatePaused';\nimport { useMergedRef } from '@/hooks/useMergedRef';\nimport { BubbleSelect } from '@/primitives/BubbleSelect';\nimport type { CollectionRef } from '@/primitives/Collection/Collection';\nimport * as ListboxPrimitive from '@/primitives/Listbox2/Listbox2';\nimport type { FontSize } from '@/types';\nimport { fixedForwardRef, FontSizes } from '@/types';\nimport { isAriaDirectionKey } from '@/utils/aria';\nimport { debounce } from '@/utils/debounce';\nimport { getNextFocussableElement, isElementInsideTable3OrReport } from '@/utils/dom';\nimport { createCustomKeyboardEvent } from '@/utils/input';\n\nimport { Collection } from './components/Collection';\nimport { Select2Context } from './components/Context';\nimport { Create } from './components/Create';\nimport type { Select2GroupProps } from './components/Group';\nimport { Group } from './components/Group';\nimport type { Select2OptionProps } from './components/Option';\nimport { Option } from './components/Option';\nimport { Search } from './components/Search';\nimport type { Select2TitleProps } from './components/Title';\nimport { Title } from './components/Title';\nimport { Trigger } from './components/Trigger';\nimport { isGroup, useChildren } from './hooks/useChildren';\nimport type {\n Select2Child,\n Select2Children,\n Select2CreateHandler,\n Select2CreateDialogRenderer,\n Select2DeleteHandler,\n Select2EditHandler,\n Select2OptionValue,\n Select2Value,\n} from './types';\nimport { createCollectionClassName, filterOption, FONT_SIZE_CLASSNAME } from './utilities';\n\ntype Select2Texts = {\n allSelect: string;\n allDeselect: string;\n cancel: string;\n chooseColor: string;\n create: string;\n delete: string;\n save: string;\n search: string;\n searchOrCreate: string;\n selectAll: string;\n selectAllResults: string;\n deselectAll: string;\n deselectAllResults: string;\n};\n\ntype Select2Props<T extends Select2Value = Select2Value> = Omit<\n React.HTMLAttributes<HTMLButtonElement>,\n 'children' | 'defaultValue' | 'onChange' | 'value'\n> & {\n /** Autofocus Select2 when loaded **/\n autoFocus?: boolean;\n /** Array of options in Select2 */\n children: Select2Children;\n /** Initial value of the input in Select2 */\n defaultValue?: T;\n /** Set what value should have an empty option in Select2 */\n emptyValue?: Extract<T, Select2OptionValue>;\n /** Whether the Select2 is in a disabled state **/\n disabled?: boolean;\n /** Font size of text in Select2 **/\n fontSize?: FontSize;\n /** Draws attention to the Select2 by changing its style and making it visually prominent */\n highlighted?: boolean;\n /** Whether the Select2 is in an invalid state **/\n invalid?: boolean;\n /** Whether the Select2 is loading the data **/\n loading?: boolean;\n /** Whether the Select2 allows selecting multiple values **/\n multiple?: boolean;\n /** Whether the Select2 is in an invalid state **/\n name?: string;\n /** Handler called when user chooses an option from the provided options **/\n onChange?: (value: T) => void;\n /** Handler called when user creates a new option **/\n onCreate?: Select2CreateHandler;\n /** Handler called when user deletes an option **/\n onDelete?: Select2DeleteHandler;\n /** Handler called when user edits an option **/\n onEdit?: Select2EditHandler;\n /** Placeholder showed when nothing is selected **/\n placeholder?: string;\n /** Whether the Select2 is in a readonly state **/\n readOnly?: boolean;\n required?: boolean;\n /** Renders select options as tags **/\n tags?: boolean;\n /** Value of the input in select2 */\n value?: T;\n /** Create dialog component, if specified, then create button will become always visible in the bottom of options dropdown,\n * when clicked, it will open create dialog and wait for 'onCreate' handler to be triggered from the dialog */\n createDialog?: Select2CreateDialogRenderer;\n /** Create button text */\n createTriggerText?: string;\n};\n\n// generic overload is the public face; the wide implementation signature lets the internals\n// (which all operate on Select2Value) consume the props without assertions\nfunction _Select2Inner<T extends Select2Value = Select2Value>(\n props: Select2Props<T>,\n ref: React.Ref<HTMLButtonElement>\n): React.JSX.Element;\nfunction _Select2Inner(props: Select2Props, ref: React.Ref<HTMLButtonElement>): React.JSX.Element {\n const {\n children: initChildren,\n defaultValue,\n disabled = false,\n emptyValue = undefined,\n fontSize,\n highlighted = false,\n invalid = false,\n loading,\n multiple = false,\n name,\n onChange,\n onCreate,\n onDelete,\n onEdit,\n placeholder,\n readOnly = false,\n tags = false,\n value: prop,\n createDialog,\n createTriggerText,\n ...otherProps\n } = props;\n\n const emptyOption: React.ReactElement<Select2OptionProps> | undefined = React.useMemo(() => {\n if (emptyValue !== undefined && !multiple) {\n // Empty option has 0px height, because it's empty, so need to apply height manually\n return <Option key=\"__empty\" children=\"\" value={emptyValue} className=\"h-8\" />;\n }\n\n return undefined;\n }, [emptyValue, multiple]);\n\n const initialChildren = React.useMemo(() => {\n // flatten nested arrays from maps and strip conditionals (false/null) so the internals see a flat list\n const children = React.Children.toArray(initChildren).filter((child): child is Select2Child =>\n React.isValidElement(child)\n );\n\n return emptyOption ? [emptyOption, ...children] : children;\n }, [emptyOption, initChildren]);\n\n // refs\n const internalRef = useMergedRef<HTMLButtonElement>(ref);\n const listboxRef = React.useRef<CollectionRef>(null);\n const searchRef = React.useRef<HTMLInputElement>(null);\n const { texts } = useLocalization();\n // align the listbox min width with the width of the input - it should never be smaller\n const dimensions = useBoundingClientRectListener(internalRef);\n\n // state\n const [open, setOpen] = React.useState(false);\n const [value, _setValue] = useControlled<Select2Value>({\n // uncontrolled\n defaultValue,\n // controlled\n onChange,\n value: prop,\n });\n const setValue = ListboxPrimitive.createListboxValueSetter(\n multiple,\n // the state can genuinely become undefined (form reset), but widening `useControlled` to\n // `Select2Value | undefined` would require onChange to accept `undefined` — a breaking API change\n _setValue as React.Dispatch<React.SetStateAction<Select2Value | undefined>>\n );\n const [validationError, setValidationError] = React.useState<Error | undefined>();\n const [shouldPauseHoverState, setShouldPauseHoverState] = useIsHoverStatePaused();\n\n const { flattenedChildren, filteredChildren, searchQuery, setSearchQuery } = useChildren({\n children: initialChildren,\n emptyValue,\n multiple,\n open,\n setValue,\n value,\n });\n\n // context\n const context = {\n disabled,\n highlighted,\n invalid,\n listboxRef,\n multiple,\n onCreate,\n onDelete,\n onEdit,\n open,\n readOnly,\n ref: internalRef,\n searchQuery,\n searchRef,\n setOpen,\n setSearchQuery,\n setValidationError,\n setValue,\n shouldPauseHoverState,\n setShouldPauseHoverState,\n tags,\n fontSize,\n validationError,\n value,\n createDialog,\n createTriggerText,\n };\n\n const hasInlineCreation = onCreate && !createDialog;\n const hasSearch = flattenedChildren.length > 5 || hasInlineCreation;\n const visibleChildren = searchQuery === '' ? initialChildren : filteredChildren;\n const selectOptions =\n searchQuery === ''\n ? flattenedChildren.map(child => child.props.value)\n : filteredChildren.flatMap(child => {\n if (isGroup(child)) {\n return Array.isArray(child.props.children)\n ? child.props.children.map(subChild => subChild.props.value)\n : [];\n }\n return child.props.value;\n });\n\n // support typeahead functionality when search isn't available\n const queryTimeoutRef = React.useRef('');\n\n const typeahead = debounce(function () {\n if (!queryTimeoutRef.current) {\n return;\n }\n\n // match against the flattened list — selectOptions is flattened too, so indices\n // stay aligned when groups are present, and group members can be matched\n const matchedValueIndex = flattenedChildren.findIndex(child => filterOption(child, queryTimeoutRef.current));\n\n if (matchedValueIndex > -1 && selectOptions[matchedValueIndex] !== undefined) {\n setValue(selectOptions[matchedValueIndex]);\n }\n\n queryTimeoutRef.current = '';\n }, 200);\n\n const setValueIfMatched = (query: string) => {\n queryTimeoutRef.current = queryTimeoutRef.current + query;\n typeahead();\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n if (open) {\n event.preventDefault();\n } else if (isElementInsideTable3OrReport(event.currentTarget) && isAriaDirectionKey(event)) {\n return;\n } else if (!event.ctrlKey && !event.metaKey && (event.key === 'ArrowDown' || /^[a-z0-9]$/iu.test(event.key))) {\n setOpen(true);\n\n if (!hasSearch) {\n setValueIfMatched(event.key);\n }\n }\n\n // Collect the first character when opening with keyboard (when user starts typing while focused on a trigger)\n if (hasSearch && /^[a-z0-9]$/iu.test(event.key)) {\n setSearchQuery(prev => prev + event.key);\n }\n\n // the focus should always remain on the input, so we forward events on to the listbox\n listboxRef.current?.dispatchEvent(createCustomKeyboardEvent(event));\n };\n\n const shouldFocusNextRef = React.useRef<number | undefined>(undefined);\n\n const handleHorizontalNavigation = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (isElementInsideTable3OrReport(internalRef.current)) {\n const isTriggeredFromPopover = event.target instanceof Node && event.currentTarget.contains?.(event.target);\n\n if ((event.key === 'ArrowLeft' || event.key === 'ArrowRight') && isTriggeredFromPopover) {\n // prevents scrolling horizontally in the table on arrow left/right.\n event.preventDefault();\n event.stopPropagation();\n\n shouldFocusNextRef.current = event.key === 'ArrowLeft' ? -1 : +1;\n setOpen(false);\n }\n }\n };\n\n const handleListboxKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n if (isAriaDirectionKey(event)) {\n setShouldPauseHoverState(true);\n return;\n }\n\n if (event.key === 'Tab') {\n shouldFocusNextRef.current = event.shiftKey ? -1 : +1;\n setOpen(false);\n return;\n }\n\n // Handle Escape key to close the select without closing the parent dialog\n if (!hasSearch && event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n setOpen(false);\n return;\n }\n\n // support typeahead to set the value by typing its text\n if (!hasSearch && /^[a-z0-9]$/iu.test(event.key)) {\n setValueIfMatched(event.key);\n }\n };\n\n const handleOpenChange = (open: boolean, details: { reason: string; event: Event }) => {\n if (!open && (details.reason === 'outside-press' || details.reason === 'focus-out')) {\n otherProps.onBlur?.(details.event as unknown as React.FocusEvent<HTMLButtonElement>);\n }\n setOpen(open);\n };\n\n const handleFinalFocus = (closeType: 'mouse' | 'touch' | 'keyboard' | 'pen' | '') => {\n if (shouldFocusNextRef.current !== undefined) {\n const el = getNextFocussableElement(internalRef.current, shouldFocusNextRef.current);\n shouldFocusNextRef.current = undefined;\n return el || false;\n }\n if (closeType === 'mouse' || closeType === 'touch') {\n // Don't steal focus — the clicked element receives it naturally.\n return false;\n }\n return true;\n };\n const areAllSelected = Array.isArray(value) && selectOptions.every(option => value.includes(option));\n\n const selectAllText = React.useMemo(() => {\n if (searchQuery === '') {\n if (areAllSelected) {\n return texts.select2.deselectAll;\n }\n return texts.select2.selectAll;\n }\n\n if (areAllSelected) {\n return texts.select2.deselectAllResults;\n }\n\n return texts.select2.selectAllResults;\n }, [areAllSelected, searchQuery]);\n\n const selectAll = () => {\n if (!Array.isArray(value) || value.length === 0) {\n setValue(selectOptions);\n } else {\n // array of all available options which are not selected\n const preselectedValues = selectOptions.filter(option => !value.includes(option));\n setValue([...value, ...preselectedValues]);\n }\n };\n\n const deselectAll = () => {\n if (searchQuery === '') {\n setValue([]);\n } else {\n const nextValue = Array.isArray(value) && value.filter(subValue => !selectOptions.includes(subValue));\n setValue(nextValue);\n }\n };\n\n const className = cn(\n 'rounded border border-gray-300 bg-white py-1.5 shadow-md',\n {\n 'focus-within:yt-focus': !hasSearch,\n 'outline-none': hasSearch,\n },\n createCollectionClassName()\n );\n\n return (\n <Select2Context.Provider value={context}>\n <PopoverPrimitive.Root open={open} onOpenChange={handleOpenChange}>\n <PopoverPrimitive.Trigger\n render={\n <Trigger\n {...otherProps}\n aria-haspopup=\"dialog\"\n // oxlint-disable-next-line taco/data-taco-kebab-case -- established public selector API; renaming it is a breaking change\n data-taco=\"Select2\"\n data-multiple={multiple ? true : undefined}\n emptyValue={emptyValue}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n ref={internalRef}>\n {flattenedChildren}\n </Trigger>\n }\n />\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Positioner\n align=\"start\"\n sideOffset={4}\n collisionAvoidance={{\n side: 'flip',\n fallbackAxisSide: 'none',\n }}>\n <PopoverPrimitive.Popup\n className={className}\n style={{ minWidth: dimensions?.width ? `${dimensions.width}px` : undefined }}\n initialFocus={hasSearch ? searchRef : true}\n finalFocus={handleFinalFocus}\n onKeyDown={handleHorizontalNavigation}\n tabIndex={-1}>\n {hasSearch ? (\n <>\n <Search\n placeholder={hasInlineCreation ? texts.select2.searchOrCreate : texts.select2.search}\n ref={searchRef}\n />\n {multiple && selectOptions.length > 1 && (\n <>\n <LegacyButton\n className=\"!justify-start\"\n appearance=\"discrete\"\n onClick={areAllSelected ? deselectAll : selectAll}>\n {selectAllText}\n </LegacyButton>\n <div className=\"mx-3 rounded border-t border-gray-200\" />\n </>\n )}\n </>\n ) : null}\n {loading ? (\n <span\n className={cn(\n 'flex items-center italic text-gray-700',\n fontSize && FONT_SIZE_CLASSNAME[fontSize]\n )}>\n <span>\n <Spinner\n delay={0}\n className={cn('ml-3 mr-2 mt-1.5 h-5 w-5', {\n '!mt-1 !h-3.5 !w-3.5': fontSize === FontSizes.small,\n '!h-4 !w-4': fontSize === FontSizes.medium,\n '!h-5 !w-5': fontSize === FontSizes.large,\n })}\n />\n </span>\n <span>{texts.listbox.loading}</span>\n </span>\n ) : flattenedChildren.length <= 0 && !onCreate ? (\n <div className=\"-mt-0.5 flex h-8 items-center px-2 text-gray-700\" role=\"presentation\">\n {texts.listbox.empty}\n </div>\n ) : (\n <ListboxPrimitive.Root\n className=\"flex flex-col gap-0.5 focus-visible:outline-none\"\n customSelector=\":scope > button\"\n disabled={disabled}\n multiple={multiple}\n onKeyDown={handleListboxKeyDown}\n readOnly={readOnly}\n ref={listboxRef}\n setValue={setValue}\n value={value}>\n <Collection>{visibleChildren}</Collection>\n {onCreate ? <Create onCreate={onCreate} options={flattenedChildren} /> : null}\n </ListboxPrimitive.Root>\n )}\n </PopoverPrimitive.Popup>\n </PopoverPrimitive.Positioner>\n </PopoverPrimitive.Portal>\n <ControlledHiddenField\n emptyValue={emptyValue}\n multiple={multiple || tags}\n name={name}\n options={flattenedChildren.map(child => child.props.value)}\n parentRef={internalRef}\n setValue={setValue}\n value={value}\n />\n </PopoverPrimitive.Root>\n </Select2Context.Provider>\n );\n}\n\nexport const Select2 = Object.assign(fixedForwardRef(_Select2Inner), {\n Option,\n Group,\n Title,\n displayName: 'Select2',\n});\n\ntype ControlledHiddenFieldProps = {\n emptyValue: ListboxPrimitive.Listbox2OptionValue | undefined;\n multiple: boolean;\n name: string | undefined;\n options: Select2OptionValue[];\n parentRef: React.RefObject<HTMLButtonElement | null>;\n setValue: (nextValue: Select2Value | undefined) => void;\n value: Select2Value | undefined;\n};\n\nconst ControlledHiddenField = (props: ControlledHiddenFieldProps) => {\n const { emptyValue, multiple, name, options, parentRef, value, setValue } = props;\n const isFormControl = useIsFormControl(parentRef, () => setValue(multiple ? [] : undefined));\n\n let bubbleValue;\n\n if (isFormControl) {\n if (value !== undefined) {\n if (multiple) {\n bubbleValue = Array.isArray(value) ? value.map(String) : [value === null ? '' : String(value)];\n } else {\n bubbleValue = value === null ? '' : String(value);\n }\n }\n\n return (\n <BubbleSelect aria-hidden key={String(bubbleValue)} multiple={multiple} name={name} tabIndex={-1} value={bubbleValue}>\n {emptyValue === undefined ? null : <option value={emptyValue === null ? '' : String(emptyValue)} />}\n {options.map(option => (\n <option key={String(option)} value={String(option)} />\n ))}\n </BubbleSelect>\n );\n }\n\n return null;\n};\n\nexport type {\n Select2Texts,\n Select2Child,\n Select2GroupProps,\n Select2OptionProps,\n Select2OptionValue,\n Select2Value,\n Select2Props,\n Select2TitleProps,\n Select2Children,\n};\n"],"names":["React","ListboxPrimitive.createListboxValueSetter","open","PopoverPrimitive","ListboxPrimitive.Root"],"mappings":"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"}
1
+ {"version":3,"file":"Select2.js","sources":["../../../src/components/Select2/Select2.tsx"],"sourcesContent":["import { Popover as PopoverPrimitive } from '@base-ui/react/popover';\nimport cn from 'clsx';\nimport React from 'react';\n\nimport { LegacyButton, Spinner, useLocalization } from '@/components';\nimport { useBoundingClientRectListener } from '@/hooks/useBoundingClientRectListener';\nimport { useControlled } from '@/hooks/useControlled';\nimport { useIsFormControl } from '@/hooks/useIsFormControl';\nimport { useIsHoverStatePaused } from '@/hooks/useIsHoverStatePaused';\nimport { useMergedRef } from '@/hooks/useMergedRef';\nimport { BubbleSelect } from '@/primitives/BubbleSelect';\nimport type { CollectionRef } from '@/primitives/Collection/Collection';\nimport * as ListboxPrimitive from '@/primitives/Listbox2/Listbox2';\nimport type { FontSize } from '@/types';\nimport { fixedForwardRef, FontSizes } from '@/types';\nimport { isAriaDirectionKey } from '@/utils/aria';\nimport { debounce } from '@/utils/debounce';\nimport { getNextFocussableElement, isElementInsideTable3OrReport } from '@/utils/dom';\nimport { createCustomKeyboardEvent } from '@/utils/input';\n\nimport { Collection } from './components/Collection';\nimport { Select2Context } from './components/Context';\nimport { Create } from './components/Create';\nimport type { Select2GroupProps } from './components/Group';\nimport { Group } from './components/Group';\nimport type { Select2OptionProps } from './components/Option';\nimport { Option } from './components/Option';\nimport { Search } from './components/Search';\nimport type { Select2TitleProps } from './components/Title';\nimport { Title } from './components/Title';\nimport { Trigger } from './components/Trigger';\nimport { isGroup, useChildren } from './hooks/useChildren';\nimport type {\n Select2Child,\n Select2Children,\n Select2CreateHandler,\n Select2CreateDialogRenderer,\n Select2DeleteHandler,\n Select2EditHandler,\n Select2OptionValue,\n Select2Value,\n} from './types';\nimport { createCollectionClassName, filterOption, FONT_SIZE_CLASSNAME } from './utilities';\n\ntype Select2Texts = {\n allSelect: string;\n allDeselect: string;\n cancel: string;\n chooseColor: string;\n create: string;\n delete: string;\n save: string;\n search: string;\n searchOrCreate: string;\n selectAll: string;\n selectAllResults: string;\n deselectAll: string;\n deselectAllResults: string;\n};\n\ntype Select2Props<T extends Select2Value = Select2Value> = Omit<\n React.HTMLAttributes<HTMLButtonElement>,\n 'children' | 'defaultValue' | 'onChange' | 'value'\n> & {\n /** Autofocus Select2 when loaded **/\n autoFocus?: boolean;\n /** Array of options in Select2 */\n children: Select2Children;\n /** Initial value of the input in Select2 */\n defaultValue?: T;\n /** Set what value should have an empty option in Select2 */\n emptyValue?: Extract<T, Select2OptionValue>;\n /** Whether the Select2 is in a disabled state **/\n disabled?: boolean;\n /** Font size of text in Select2 **/\n fontSize?: FontSize;\n /** Draws attention to the Select2 by changing its style and making it visually prominent */\n highlighted?: boolean;\n /** Whether the Select2 is in an invalid state **/\n invalid?: boolean;\n /** Whether the Select2 is loading the data **/\n loading?: boolean;\n /** Whether the Select2 allows selecting multiple values **/\n multiple?: boolean;\n /** Whether the Select2 is in an invalid state **/\n name?: string;\n /** Handler called when user chooses an option from the provided options **/\n onChange?: (value: T) => void;\n /** Handler called when user creates a new option **/\n onCreate?: Select2CreateHandler;\n /** Handler called when user deletes an option **/\n onDelete?: Select2DeleteHandler;\n /** Handler called when user edits an option **/\n onEdit?: Select2EditHandler;\n /** Placeholder showed when nothing is selected **/\n placeholder?: string;\n /** Whether the Select2 is in a readonly state **/\n readOnly?: boolean;\n required?: boolean;\n /** Renders select options as tags **/\n tags?: boolean;\n /** Value of the input in select2 */\n value?: T;\n /** Create dialog component, if specified, then create button will become always visible in the bottom of options dropdown,\n * when clicked, it will open create dialog and wait for 'onCreate' handler to be triggered from the dialog */\n createDialog?: Select2CreateDialogRenderer;\n /** Create button text */\n createTriggerText?: string;\n};\n\n// generic overload is the public face; the wide implementation signature lets the internals\n// (which all operate on Select2Value) consume the props without assertions\nfunction _Select2Inner<T extends Select2Value = Select2Value>(\n props: Select2Props<T>,\n ref: React.Ref<HTMLButtonElement>\n): React.JSX.Element;\nfunction _Select2Inner(props: Select2Props, ref: React.Ref<HTMLButtonElement>): React.JSX.Element {\n const {\n children: initChildren,\n defaultValue,\n disabled = false,\n emptyValue = undefined,\n fontSize,\n highlighted = false,\n invalid = false,\n loading,\n multiple = false,\n name,\n onChange,\n onCreate,\n onDelete,\n onEdit,\n placeholder,\n readOnly = false,\n tags = false,\n value: prop,\n createDialog,\n createTriggerText,\n ...otherProps\n } = props;\n\n const emptyOption: React.ReactElement<Select2OptionProps> | undefined = React.useMemo(() => {\n if (emptyValue !== undefined && !multiple) {\n // Empty option has 0px height, because it's empty, so need to apply height manually\n return <Option key=\"__empty\" children=\"\" value={emptyValue} className=\"h-8\" />;\n }\n\n return undefined;\n }, [emptyValue, multiple]);\n\n const initialChildren = React.useMemo(() => {\n // flatten nested arrays from maps and strip conditionals (false/null) so the internals see a flat list\n const children = React.Children.toArray(initChildren).filter((child): child is Select2Child =>\n React.isValidElement(child)\n );\n\n return emptyOption ? [emptyOption, ...children] : children;\n }, [emptyOption, initChildren]);\n\n // refs\n const internalRef = useMergedRef<HTMLButtonElement>(ref);\n const listboxRef = React.useRef<CollectionRef>(null);\n const searchRef = React.useRef<HTMLInputElement>(null);\n const { texts } = useLocalization();\n // align the listbox min width with the width of the input - it should never be smaller\n const dimensions = useBoundingClientRectListener(internalRef);\n\n // state\n const [open, setOpen] = React.useState(false);\n const [value, _setValue] = useControlled<Select2Value>({\n // uncontrolled\n defaultValue,\n // controlled\n onChange,\n value: prop,\n });\n const setValue = ListboxPrimitive.createListboxValueSetter(\n multiple,\n // the state can genuinely become undefined (form reset), but widening `useControlled` to\n // `Select2Value | undefined` would require onChange to accept `undefined` — a breaking API change\n _setValue as React.Dispatch<React.SetStateAction<Select2Value | undefined>>\n );\n const [validationError, setValidationError] = React.useState<Error | undefined>();\n const [shouldPauseHoverState, setShouldPauseHoverState] = useIsHoverStatePaused();\n\n const { flattenedChildren, filteredChildren, searchQuery, setSearchQuery } = useChildren({\n children: initialChildren,\n emptyValue,\n multiple,\n open,\n setValue,\n value,\n });\n\n // context\n const context = {\n disabled,\n highlighted,\n invalid,\n listboxRef,\n multiple,\n onCreate,\n onDelete,\n onEdit,\n open,\n readOnly,\n ref: internalRef,\n searchQuery,\n searchRef,\n setOpen,\n setSearchQuery,\n setValidationError,\n setValue,\n shouldPauseHoverState,\n setShouldPauseHoverState,\n tags,\n fontSize,\n validationError,\n value,\n createDialog,\n createTriggerText,\n };\n\n const hasInlineCreation = onCreate && !createDialog;\n const hasSearch = flattenedChildren.length > 5 || hasInlineCreation;\n const visibleChildren = searchQuery === '' ? initialChildren : filteredChildren;\n const selectOptions =\n searchQuery === ''\n ? flattenedChildren.map(child => child.props.value)\n : filteredChildren.flatMap(child => {\n if (isGroup(child)) {\n return Array.isArray(child.props.children)\n ? child.props.children.map(subChild => subChild.props.value)\n : [];\n }\n return child.props.value;\n });\n\n // support typeahead functionality when search isn't available\n const queryTimeoutRef = React.useRef('');\n\n const typeahead = debounce(function () {\n if (!queryTimeoutRef.current) {\n return;\n }\n\n // match against the flattened list — selectOptions is flattened too, so indices\n // stay aligned when groups are present, and group members can be matched\n const matchedValueIndex = flattenedChildren.findIndex(child => filterOption(child, queryTimeoutRef.current));\n\n if (matchedValueIndex > -1 && selectOptions[matchedValueIndex] !== undefined) {\n setValue(selectOptions[matchedValueIndex]);\n }\n\n queryTimeoutRef.current = '';\n }, 200);\n\n const setValueIfMatched = (query: string) => {\n queryTimeoutRef.current = queryTimeoutRef.current + query;\n typeahead();\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n if (open) {\n event.preventDefault();\n } else if (isElementInsideTable3OrReport(event.currentTarget) && isAriaDirectionKey(event)) {\n return;\n } else if (!event.ctrlKey && !event.metaKey && (event.key === 'ArrowDown' || /^[a-z0-9]$/iu.test(event.key))) {\n setOpen(true);\n\n if (!hasSearch) {\n setValueIfMatched(event.key);\n }\n }\n\n // Collect the first character when opening with keyboard (when user starts typing while focused on a trigger)\n if (hasSearch && /^[a-z0-9]$/iu.test(event.key)) {\n setSearchQuery(prev => prev + event.key);\n }\n\n // the focus should always remain on the input, so we forward events on to the listbox\n listboxRef.current?.dispatchEvent(createCustomKeyboardEvent(event));\n };\n\n const shouldFocusNextRef = React.useRef<number | undefined>(undefined);\n\n const handleHorizontalNavigation = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (isElementInsideTable3OrReport(internalRef.current)) {\n const isTriggeredFromPopover = event.target instanceof Node && event.currentTarget.contains?.(event.target);\n\n if ((event.key === 'ArrowLeft' || event.key === 'ArrowRight') && isTriggeredFromPopover) {\n // prevents scrolling horizontally in the table on arrow left/right.\n event.preventDefault();\n event.stopPropagation();\n\n shouldFocusNextRef.current = event.key === 'ArrowLeft' ? -1 : +1;\n setOpen(false);\n }\n }\n };\n\n const handleListboxKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n if (isAriaDirectionKey(event)) {\n setShouldPauseHoverState(true);\n return;\n }\n\n if (event.key === 'Tab') {\n shouldFocusNextRef.current = event.shiftKey ? -1 : +1;\n setOpen(false);\n return;\n }\n\n // Handle Escape key to close the select without closing the parent dialog\n if (!hasSearch && event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n setOpen(false);\n return;\n }\n\n // support typeahead to set the value by typing its text\n if (!hasSearch && /^[a-z0-9]$/iu.test(event.key)) {\n setValueIfMatched(event.key);\n }\n };\n\n const handleOpenChange = (open: boolean, details: { reason: string; event: Event }) => {\n if (!open && (details.reason === 'outside-press' || details.reason === 'focus-out')) {\n otherProps.onBlur?.(details.event as unknown as React.FocusEvent<HTMLButtonElement>);\n }\n setOpen(open);\n };\n\n const handleFinalFocus = (closeType: 'mouse' | 'touch' | 'keyboard' | 'pen' | '') => {\n if (shouldFocusNextRef.current !== undefined) {\n const el = getNextFocussableElement(internalRef.current, shouldFocusNextRef.current);\n shouldFocusNextRef.current = undefined;\n return el || false;\n }\n if (closeType === 'mouse' || closeType === 'touch') {\n // Don't steal focus — the clicked element receives it naturally.\n return false;\n }\n return true;\n };\n const areAllSelected = Array.isArray(value) && selectOptions.every(option => value.includes(option));\n\n const selectAllText = React.useMemo(() => {\n if (searchQuery === '') {\n if (areAllSelected) {\n return texts.select2.deselectAll;\n }\n return texts.select2.selectAll;\n }\n\n if (areAllSelected) {\n return texts.select2.deselectAllResults;\n }\n\n return texts.select2.selectAllResults;\n }, [areAllSelected, searchQuery]);\n\n const selectAll = () => {\n if (!Array.isArray(value) || value.length === 0) {\n setValue(selectOptions);\n } else {\n // array of all available options which are not selected\n const preselectedValues = selectOptions.filter(option => !value.includes(option));\n setValue([...value, ...preselectedValues]);\n }\n };\n\n const deselectAll = () => {\n if (searchQuery === '') {\n setValue([]);\n } else {\n const nextValue = Array.isArray(value) && value.filter(subValue => !selectOptions.includes(subValue));\n setValue(nextValue);\n }\n };\n\n const className = cn(\n 'rounded border border-gray-300 bg-white py-1.5 shadow-md',\n {\n 'focus-within:yt-focus': !hasSearch,\n 'outline-none': hasSearch,\n },\n createCollectionClassName()\n );\n\n return (\n <Select2Context.Provider value={context}>\n <PopoverPrimitive.Root open={open} onOpenChange={handleOpenChange}>\n <PopoverPrimitive.Trigger\n render={\n <Trigger\n {...otherProps}\n aria-haspopup=\"listbox\"\n aria-multiselectable={multiple}\n // oxlint-disable-next-line taco/data-taco-kebab-case -- established public selector API; renaming it is a breaking change\n data-taco=\"Select2\"\n emptyValue={emptyValue}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n ref={internalRef}>\n {flattenedChildren}\n </Trigger>\n }\n />\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Positioner\n align=\"start\"\n sideOffset={4}\n collisionAvoidance={{\n side: 'flip',\n fallbackAxisSide: 'none',\n }}>\n <PopoverPrimitive.Popup\n className={className}\n style={{ minWidth: dimensions?.width ? `${dimensions.width}px` : undefined }}\n initialFocus={hasSearch ? searchRef : true}\n finalFocus={handleFinalFocus}\n onKeyDown={handleHorizontalNavigation}\n tabIndex={-1}>\n {hasSearch ? (\n <>\n <Search\n placeholder={hasInlineCreation ? texts.select2.searchOrCreate : texts.select2.search}\n ref={searchRef}\n />\n {multiple && selectOptions.length > 1 && (\n <>\n <LegacyButton\n className=\"!justify-start\"\n appearance=\"discrete\"\n onClick={areAllSelected ? deselectAll : selectAll}>\n {selectAllText}\n </LegacyButton>\n <div className=\"mx-3 rounded border-t border-gray-200\" />\n </>\n )}\n </>\n ) : null}\n {loading ? (\n <span\n className={cn(\n 'flex items-center italic text-gray-700',\n fontSize && FONT_SIZE_CLASSNAME[fontSize]\n )}>\n <span>\n <Spinner\n delay={0}\n className={cn('ml-3 mr-2 mt-1.5 h-5 w-5', {\n '!mt-1 !h-3.5 !w-3.5': fontSize === FontSizes.small,\n '!h-4 !w-4': fontSize === FontSizes.medium,\n '!h-5 !w-5': fontSize === FontSizes.large,\n })}\n />\n </span>\n <span>{texts.listbox.loading}</span>\n </span>\n ) : flattenedChildren.length <= 0 && !onCreate ? (\n <div className=\"-mt-0.5 flex h-8 items-center px-2 text-gray-700\" role=\"presentation\">\n {texts.listbox.empty}\n </div>\n ) : (\n <ListboxPrimitive.Root\n className=\"flex flex-col gap-0.5 focus-visible:outline-none\"\n customSelector=\":scope > button\"\n disabled={disabled}\n multiple={multiple}\n onKeyDown={handleListboxKeyDown}\n readOnly={readOnly}\n ref={listboxRef}\n setValue={setValue}\n value={value}>\n <Collection>{visibleChildren}</Collection>\n {onCreate ? <Create onCreate={onCreate} options={flattenedChildren} /> : null}\n </ListboxPrimitive.Root>\n )}\n </PopoverPrimitive.Popup>\n </PopoverPrimitive.Positioner>\n </PopoverPrimitive.Portal>\n <ControlledHiddenField\n emptyValue={emptyValue}\n multiple={multiple || tags}\n name={name}\n options={flattenedChildren.map(child => child.props.value)}\n parentRef={internalRef}\n setValue={setValue}\n value={value}\n />\n </PopoverPrimitive.Root>\n </Select2Context.Provider>\n );\n}\n\nexport const Select2 = Object.assign(fixedForwardRef(_Select2Inner), {\n Option,\n Group,\n Title,\n displayName: 'Select2',\n});\n\ntype ControlledHiddenFieldProps = {\n emptyValue: ListboxPrimitive.Listbox2OptionValue | undefined;\n multiple: boolean;\n name: string | undefined;\n options: Select2OptionValue[];\n parentRef: React.RefObject<HTMLButtonElement | null>;\n setValue: (nextValue: Select2Value | undefined) => void;\n value: Select2Value | undefined;\n};\n\nconst ControlledHiddenField = (props: ControlledHiddenFieldProps) => {\n const { emptyValue, multiple, name, options, parentRef, value, setValue } = props;\n const isFormControl = useIsFormControl(parentRef, () => setValue(multiple ? [] : undefined));\n\n let bubbleValue;\n\n if (isFormControl) {\n if (value !== undefined) {\n if (multiple) {\n bubbleValue = Array.isArray(value) ? value.map(String) : [value === null ? '' : String(value)];\n } else {\n bubbleValue = value === null ? '' : String(value);\n }\n }\n\n return (\n <BubbleSelect aria-hidden key={String(bubbleValue)} multiple={multiple} name={name} tabIndex={-1} value={bubbleValue}>\n {emptyValue === undefined ? null : <option value={emptyValue === null ? '' : String(emptyValue)} />}\n {options.map(option => (\n <option key={String(option)} value={String(option)} />\n ))}\n </BubbleSelect>\n );\n }\n\n return null;\n};\n\nexport type {\n Select2Texts,\n Select2Child,\n Select2GroupProps,\n Select2OptionProps,\n Select2OptionValue,\n Select2Value,\n Select2Props,\n Select2TitleProps,\n Select2Children,\n};\n"],"names":["React","ListboxPrimitive.createListboxValueSetter","open","PopoverPrimitive","ListboxPrimitive.Root"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Table3.cjs","sources":["../../../src/components/Table3/Table3.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Table } from '@/primitives/Table/Core/Table';\nimport { fixedForwardRef } from '@/types';\n\nimport { Alert } from './components/Editing/Alert';\nimport { CreateNewRow } from './components/Row/Editing/CreateNewRow';\nimport { TemporaryRows } from './components/Row/Editing/TemporaryRow';\nimport { Editing } from './components/Toolbar/Editing/Editing';\nimport type { Table3Props, Table3Ref, Table3ColumnProps, Table3GroupProps } from './types';\nimport { useTable3 } from './useTable3';\nimport { isTableScrolled } from './util/editing';\n\nimport './style.css';\n\nconst Column: React.FC<Table3ColumnProps<unknown>> & {\n <TType = unknown>(_: Table3ColumnProps<TType>): null;\n} = () => null;\nColumn.displayName = 'Table3Column';\n\nconst Group: React.FC<Table3GroupProps> = () => null;\nGroup.displayName = 'Table3Group';\n\nconst BaseTable3 = fixedForwardRef(function BaseTable3<TType = unknown>(props: Table3Props<TType>, ref: React.Ref<Table3Ref>) {\n const table3 = useTable3<TType>(props, ref);\n\n const gridAttributes = {\n 'data-table-editing-mode': table3.meta.editing?.isEditing\n ? table3.meta.editing?.isDetailedMode\n ? 'detailed'\n : 'normal'\n : undefined,\n 'data-has-changes': table3.meta.editing.isDirty ? 'true' : undefined,\n enableHorizontalArrowKeyNavigation: table3.meta.editing.isEditing,\n };\n\n const rowsById = table3.instance.getCoreRowModel().rowsById;\n const hasAlertErrors = table3.meta.editing.getErrorsShownInAlert().some(row => {\n if (table3.meta.server._experimentalDataLoader2) {\n // consumers of dataloader2 need to run a cleanup function, as this would otherwise return false when pages are unloaded.\n return true;\n }\n\n if (rowsById[row.rowId]) {\n return true;\n }\n\n // Keep the alert when the row is hidden by filtering (or pagination) but still has unsaved edits.\n return table3.meta.editing.hasChanges(row.rowId);\n });\n\n const hasCreateWorkflow = table3.meta.editing.isEnabled && props.onEditingCreate;\n const [hasScrollbar, isScrolled] = isTableScrolled(table3.ref);\n\n let createWorkflow;\n\n if (hasCreateWorkflow) {\n createWorkflow = (\n <CreateNewRow\n buttonRef={table3.meta.editing.createRowButtonRef}\n hasScrollbar={hasScrollbar}\n table={table3.instance}\n tableMeta={table3.meta}\n tableRef={table3.ref}\n />\n );\n }\n\n return (\n <Table>\n <Table.Toolbar<TType> table={table3}>\n {table3.meta.editing.isEnabled ? (\n <Editing scrollToIndex={table3.renderer.scrollToIndex} table={table3.instance} />\n ) : null}\n </Table.Toolbar>\n {hasAlertErrors ? (\n <Alert\n className=\"mb-4\"\n scrollToIndex={table3.renderer.scrollToIndex}\n table={table3.instance}\n tableRef={table3.ref}\n />\n ) : null}\n <Table.Grid<TType>\n {...gridAttributes}\n data-taco=\"table3\"\n footerRows={hasCreateWorkflow && isScrolled ? createWorkflow : undefined}\n table={table3}>\n {hasCreateWorkflow ? (\n <>\n <TemporaryRows\n createRowButtonRef={table3.meta.editing.createRowButtonRef}\n hasScrollbar={hasScrollbar}\n table={table3.instance}\n tableMeta={table3.meta}\n tableRef={table3.ref}\n />\n {isScrolled ? null : createWorkflow}\n </>\n ) : null}\n </Table.Grid>\n </Table>\n );\n});\n\nexport const Table3 = fixedForwardRef(function Table3<TType = unknown>(props: Table3Props<TType>, ref: React.Ref<Table3Ref>) {\n const stringifiedChildren = String(props.children);\n // we force a remount (using key) when the child columns change because there are too many places to add children as an effect\n // this is cheaper from a complexity perspective, and probably performance wise as well\n const key = React.useMemo(() => String('tableKey_' + stringifiedChildren), [stringifiedChildren]);\n return <BaseTable3<TType> {...props} key={key} ref={ref} />;\n}) as (<TType = unknown>(props: Table3Props<TType> & React.RefAttributes<Table3Ref>) => React.JSX.Element) & {\n Column: typeof Column;\n Group: typeof Group;\n};\nTable3.Column = Column;\nTable3.Group = Group;\n\nexport type {\n Table3Ref,\n Table3Props,\n Table3ColumnProps,\n Table3GroupProps,\n Table3EditingSaveHandler,\n Table3EditingValidatorFn,\n Table3Texts,\n Table3FeatureProps,\n Table3CommonProps,\n Table3WithoutEditingWithClientProps,\n Table3WithoutEditingWithServerProps,\n Table3WithEditingProps,\n Table3WithEditingWithClientProps,\n Table3WithEditingWithServerProps,\n Table3EditingChangeHandler,\n Table3EditingCreateHandler,\n} from './types';\n"],"names":["fixedForwardRef","BaseTable3","useTable3","isTableScrolled","CreateNewRow","Table","Editing","Alert","TemporaryRows","Table3"],"mappings":";;;;;;;;;;;;AAeA,MAAM,SAEF,MAAM;AACV,OAAO,cAAc;AAErB,MAAM,QAAoC,MAAM;AAChD,MAAM,cAAc;AAEpB,MAAM,aAAaA,MAAAA,gBAAgB,SAASC,YAA4B,OAA2B,KAA2B;AAC1H,QAAM,SAASC,UAAAA,UAAiB,OAAO,GAAG;AAE1C,QAAM,iBAAiB;AAAA,IACnB,2BAA2B,OAAO,KAAK,SAAS,YAC1C,OAAO,KAAK,SAAS,iBACjB,aACA,WACJ;AAAA,IACN,oBAAoB,OAAO,KAAK,QAAQ,UAAU,SAAS;AAAA,IAC3D,oCAAoC,OAAO,KAAK,QAAQ;AAAA,EAAA;AAG5D,QAAM,WAAW,OAAO,SAAS,gBAAA,EAAkB;AACnD,QAAM,iBAAiB,OAAO,KAAK,QAAQ,wBAAwB,KAAK,CAAA,QAAO;AAC3E,QAAI,OAAO,KAAK,OAAO,0BAA0B;AAE7C,aAAO;AAAA,IACX;AAEA,QAAI,SAAS,IAAI,KAAK,GAAG;AACrB,aAAO;AAAA,IACX;AAGA,WAAO,OAAO,KAAK,QAAQ,WAAW,IAAI,KAAK;AAAA,EACnD,CAAC;AAED,QAAM,oBAAoB,OAAO,KAAK,QAAQ,aAAa,MAAM;AACjE,QAAM,CAAC,cAAc,UAAU,IAAIC,QAAAA,gBAAgB,OAAO,GAAG;AAE7D,MAAI;AAEJ,MAAI,mBAAmB;AACnB,qBACI,sBAAA;AAAA,MAACC,aAAAA;AAAAA,MAAA;AAAA,QACG,WAAW,OAAO,KAAK,QAAQ;AAAA,QAC/B;AAAA,QACA,OAAO,OAAO;AAAA,QACd,WAAW,OAAO;AAAA,QAClB,UAAU,OAAO;AAAA,MAAA;AAAA,IAAA;AAAA,EAG7B;AAEA,SACI,sBAAA,cAACC,MAAAA,OAAA,MACG,sBAAA,cAACA,MAAAA,MAAM,SAAN,EAAqB,OAAO,OAAA,GACxB,OAAO,KAAK,QAAQ,gDAChBC,QAAAA,SAAA,EAAQ,eAAe,OAAO,SAAS,eAAe,OAAO,OAAO,SAAA,CAAU,IAC/E,IACR,GACC,iBACG,sBAAA;AAAA,IAACC,MAAAA;AAAAA,IAAA;AAAA,MACG,WAAU;AAAA,MACV,eAAe,OAAO,SAAS;AAAA,MAC/B,OAAO,OAAO;AAAA,MACd,UAAU,OAAO;AAAA,IAAA;AAAA,EAAA,IAErB,MACJ,sBAAA;AAAA,IAACF,MAAAA,MAAM;AAAA,IAAN;AAAA,MACI,GAAG;AAAA,MACJ,aAAU;AAAA,MACV,YAAY,qBAAqB,aAAa,iBAAiB;AAAA,MAC/D,OAAO;AAAA,IAAA;AAAA,IACN,oBACG,sBAAA,cAAA,MAAA,UAAA,MACI,sBAAA;AAAA,MAACG,aAAAA;AAAAA,MAAA;AAAA,QACG,oBAAoB,OAAO,KAAK,QAAQ;AAAA,QACxC;AAAA,QACA,OAAO,OAAO;AAAA,QACd,WAAW,OAAO;AAAA,QAClB,UAAU,OAAO;AAAA,MAAA;AAAA,IAAA,GAEpB,aAAa,OAAO,cACzB,IACA;AAAA,EAAA,CAEZ;AAER,CAAC;AAEM,MAAM,SAASR,MAAAA,gBAAgB,SAASS,QAAwB,OAA2B,KAA2B;AACzH,QAAM,sBAAsB,OAAO,MAAM,QAAQ;AAGjD,QAAM,MAAM,MAAM,QAAQ,MAAM,OAAO,cAAc,mBAAmB,GAAG,CAAC,mBAAmB,CAAC;AAChG,SAAO,sBAAA,cAAC,YAAA,EAAmB,GAAG,OAAO,KAAU,KAAU;AAC7D,CAAC;AAID,OAAO,SAAS;AAChB,OAAO,QAAQ;;"}
1
+ {"version":3,"file":"Table3.cjs","sources":["../../../src/components/Table3/Table3.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Table } from '@/primitives/Table/Core/Table';\nimport { fixedForwardRef } from '@/types';\n\nimport { Alert } from './components/Editing/Alert';\nimport { CreateNewRow } from './components/Row/Editing/CreateNewRow';\nimport { TemporaryRows } from './components/Row/Editing/TemporaryRow';\nimport { Editing } from './components/Toolbar/Editing/Editing';\nimport type { Table3Props, Table3Ref, Table3ColumnProps, Table3GroupProps } from './types';\nimport { useTable3 } from './useTable3';\nimport { isTableScrolled } from './util/editing';\n\nimport './style.css';\n\nconst Column: React.FC<Table3ColumnProps<unknown>> & {\n <TType = unknown>(_: Table3ColumnProps<TType>): null;\n} = () => null;\nColumn.displayName = 'Table3Column';\n\nconst Group: React.FC<Table3GroupProps> = () => null;\nGroup.displayName = 'Table3Group';\n\nconst BaseTable3 = fixedForwardRef(function BaseTable3<TType = unknown>(props: Table3Props<TType>, ref: React.Ref<Table3Ref>) {\n const table3 = useTable3<TType>(props, ref);\n\n const gridAttributes = {\n 'data-table-editing-mode': table3.meta.editing?.isEditing\n ? table3.meta.editing?.isDetailedMode\n ? 'detailed'\n : 'normal'\n : undefined,\n 'data-has-changes': table3.meta.editing.isDirty ? 'true' : undefined,\n enableHorizontalArrowKeyNavigation: table3.meta.editing.isEditing,\n };\n\n const rowsById = table3.instance.getCoreRowModel().rowsById;\n const hasAlertErrors = table3.meta.editing.getErrorsShownInAlert().some(row => {\n if (table3.meta.server._experimentalDataLoader2) {\n // consumers of dataloader2 need to run a cleanup function, as this would otherwise return false when pages are unloaded.\n return true;\n }\n\n if (rowsById[row.rowId]) {\n return true;\n }\n\n // Keep the alert when the row is hidden by filtering (or pagination) but still has unsaved edits.\n return table3.meta.editing.hasChanges(row.rowId);\n });\n\n const hasCreateWorkflow = table3.meta.editing.isEnabled && props.onEditingCreate;\n const [hasScrollbar, isScrolled] = isTableScrolled(table3.ref);\n\n let createWorkflow;\n\n if (hasCreateWorkflow) {\n createWorkflow = (\n <CreateNewRow\n buttonRef={table3.meta.editing.createRowButtonRef}\n hasScrollbar={hasScrollbar}\n table={table3.instance}\n tableMeta={table3.meta}\n tableRef={table3.ref}\n />\n );\n }\n\n return (\n <Table>\n <Table.Toolbar<TType> table={table3}>\n {table3.meta.editing.isEnabled ? (\n <Editing scrollToIndex={table3.renderer.scrollToIndex} table={table3.instance} />\n ) : null}\n </Table.Toolbar>\n {hasAlertErrors ? (\n <Alert\n className=\"mb-4\"\n scrollToIndex={table3.renderer.scrollToIndex}\n table={table3.instance}\n tableRef={table3.ref}\n />\n ) : null}\n <Table.Grid<TType>\n {...gridAttributes}\n data-taco=\"table3\"\n footerRows={hasCreateWorkflow && isScrolled ? createWorkflow : undefined}\n table={table3}>\n {hasCreateWorkflow ? (\n <>\n <TemporaryRows\n createRowButtonRef={table3.meta.editing.createRowButtonRef}\n hasScrollbar={hasScrollbar}\n table={table3.instance}\n tableMeta={table3.meta}\n tableRef={table3.ref}\n />\n {isScrolled ? null : createWorkflow}\n </>\n ) : null}\n </Table.Grid>\n </Table>\n );\n});\n\nexport const Table3 = fixedForwardRef(function Table3<TType = unknown>(props: Table3Props<TType>, ref: React.Ref<Table3Ref>) {\n const stringifiedChildren = String(props.children);\n // we force a remount (using key) when the child columns change because there are too many places to add children as an effect\n // this is cheaper from a complexity perspective, and probably performance wise as well\n const key = React.useMemo(() => String('tableKey_' + stringifiedChildren), [stringifiedChildren]);\n return <BaseTable3<TType> {...props} key={key} ref={ref} />;\n}) as (<TType = unknown>(props: Table3Props<TType> & React.RefAttributes<Table3Ref>) => React.JSX.Element) & {\n Column: typeof Column;\n Group: typeof Group;\n};\nTable3.Column = Column;\nTable3.Group = Group;\n\nexport type {\n Table3Ref,\n Table3Props,\n Table3ColumnProps,\n Table3GroupProps,\n RowActionConfig,\n Table3EditingSaveHandler,\n Table3EditingValidatorFn,\n Table3Texts,\n Table3FeatureProps,\n Table3CommonProps,\n Table3WithoutEditingWithClientProps,\n Table3WithoutEditingWithServerProps,\n Table3WithEditingProps,\n Table3WithEditingWithClientProps,\n Table3WithEditingWithServerProps,\n Table3EditingChangeHandler,\n Table3EditingCreateHandler,\n} from './types';\n"],"names":["fixedForwardRef","BaseTable3","useTable3","isTableScrolled","CreateNewRow","Table","Editing","Alert","TemporaryRows","Table3"],"mappings":";;;;;;;;;;;;AAeA,MAAM,SAEF,MAAM;AACV,OAAO,cAAc;AAErB,MAAM,QAAoC,MAAM;AAChD,MAAM,cAAc;AAEpB,MAAM,aAAaA,MAAAA,gBAAgB,SAASC,YAA4B,OAA2B,KAA2B;AAC1H,QAAM,SAASC,UAAAA,UAAiB,OAAO,GAAG;AAE1C,QAAM,iBAAiB;AAAA,IACnB,2BAA2B,OAAO,KAAK,SAAS,YAC1C,OAAO,KAAK,SAAS,iBACjB,aACA,WACJ;AAAA,IACN,oBAAoB,OAAO,KAAK,QAAQ,UAAU,SAAS;AAAA,IAC3D,oCAAoC,OAAO,KAAK,QAAQ;AAAA,EAAA;AAG5D,QAAM,WAAW,OAAO,SAAS,gBAAA,EAAkB;AACnD,QAAM,iBAAiB,OAAO,KAAK,QAAQ,wBAAwB,KAAK,CAAA,QAAO;AAC3E,QAAI,OAAO,KAAK,OAAO,0BAA0B;AAE7C,aAAO;AAAA,IACX;AAEA,QAAI,SAAS,IAAI,KAAK,GAAG;AACrB,aAAO;AAAA,IACX;AAGA,WAAO,OAAO,KAAK,QAAQ,WAAW,IAAI,KAAK;AAAA,EACnD,CAAC;AAED,QAAM,oBAAoB,OAAO,KAAK,QAAQ,aAAa,MAAM;AACjE,QAAM,CAAC,cAAc,UAAU,IAAIC,QAAAA,gBAAgB,OAAO,GAAG;AAE7D,MAAI;AAEJ,MAAI,mBAAmB;AACnB,qBACI,sBAAA;AAAA,MAACC,aAAAA;AAAAA,MAAA;AAAA,QACG,WAAW,OAAO,KAAK,QAAQ;AAAA,QAC/B;AAAA,QACA,OAAO,OAAO;AAAA,QACd,WAAW,OAAO;AAAA,QAClB,UAAU,OAAO;AAAA,MAAA;AAAA,IAAA;AAAA,EAG7B;AAEA,SACI,sBAAA,cAACC,MAAAA,OAAA,MACG,sBAAA,cAACA,MAAAA,MAAM,SAAN,EAAqB,OAAO,OAAA,GACxB,OAAO,KAAK,QAAQ,gDAChBC,QAAAA,SAAA,EAAQ,eAAe,OAAO,SAAS,eAAe,OAAO,OAAO,SAAA,CAAU,IAC/E,IACR,GACC,iBACG,sBAAA;AAAA,IAACC,MAAAA;AAAAA,IAAA;AAAA,MACG,WAAU;AAAA,MACV,eAAe,OAAO,SAAS;AAAA,MAC/B,OAAO,OAAO;AAAA,MACd,UAAU,OAAO;AAAA,IAAA;AAAA,EAAA,IAErB,MACJ,sBAAA;AAAA,IAACF,MAAAA,MAAM;AAAA,IAAN;AAAA,MACI,GAAG;AAAA,MACJ,aAAU;AAAA,MACV,YAAY,qBAAqB,aAAa,iBAAiB;AAAA,MAC/D,OAAO;AAAA,IAAA;AAAA,IACN,oBACG,sBAAA,cAAA,MAAA,UAAA,MACI,sBAAA;AAAA,MAACG,aAAAA;AAAAA,MAAA;AAAA,QACG,oBAAoB,OAAO,KAAK,QAAQ;AAAA,QACxC;AAAA,QACA,OAAO,OAAO;AAAA,QACd,WAAW,OAAO;AAAA,QAClB,UAAU,OAAO;AAAA,MAAA;AAAA,IAAA,GAEpB,aAAa,OAAO,cACzB,IACA;AAAA,EAAA,CAEZ;AAER,CAAC;AAEM,MAAM,SAASR,MAAAA,gBAAgB,SAASS,QAAwB,OAA2B,KAA2B;AACzH,QAAM,sBAAsB,OAAO,MAAM,QAAQ;AAGjD,QAAM,MAAM,MAAM,QAAQ,MAAM,OAAO,cAAc,mBAAmB,GAAG,CAAC,mBAAmB,CAAC;AAChG,SAAO,sBAAA,cAAC,YAAA,EAAmB,GAAG,OAAO,KAAU,KAAU;AAC7D,CAAC;AAID,OAAO,SAAS;AAChB,OAAO,QAAQ;;"}
@@ -8,4 +8,4 @@ export declare const Table3: (<TType = unknown>(props: Table3Props<TType> & Reac
8
8
  Column: typeof Column;
9
9
  Group: typeof Group;
10
10
  };
11
- export type { Table3Ref, Table3Props, Table3ColumnProps, Table3GroupProps, Table3EditingSaveHandler, Table3EditingValidatorFn, Table3Texts, Table3FeatureProps, Table3CommonProps, Table3WithoutEditingWithClientProps, Table3WithoutEditingWithServerProps, Table3WithEditingProps, Table3WithEditingWithClientProps, Table3WithEditingWithServerProps, Table3EditingChangeHandler, Table3EditingCreateHandler, } from './types';
11
+ export type { Table3Ref, Table3Props, Table3ColumnProps, Table3GroupProps, RowActionConfig, Table3EditingSaveHandler, Table3EditingValidatorFn, Table3Texts, Table3FeatureProps, Table3CommonProps, Table3WithoutEditingWithClientProps, Table3WithoutEditingWithServerProps, Table3WithEditingProps, Table3WithEditingWithClientProps, Table3WithEditingWithServerProps, Table3EditingChangeHandler, Table3EditingCreateHandler, } from './types';
@@ -1 +1 @@
1
- {"version":3,"file":"Table3.js","sources":["../../../src/components/Table3/Table3.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Table } from '@/primitives/Table/Core/Table';\nimport { fixedForwardRef } from '@/types';\n\nimport { Alert } from './components/Editing/Alert';\nimport { CreateNewRow } from './components/Row/Editing/CreateNewRow';\nimport { TemporaryRows } from './components/Row/Editing/TemporaryRow';\nimport { Editing } from './components/Toolbar/Editing/Editing';\nimport type { Table3Props, Table3Ref, Table3ColumnProps, Table3GroupProps } from './types';\nimport { useTable3 } from './useTable3';\nimport { isTableScrolled } from './util/editing';\n\nimport './style.css';\n\nconst Column: React.FC<Table3ColumnProps<unknown>> & {\n <TType = unknown>(_: Table3ColumnProps<TType>): null;\n} = () => null;\nColumn.displayName = 'Table3Column';\n\nconst Group: React.FC<Table3GroupProps> = () => null;\nGroup.displayName = 'Table3Group';\n\nconst BaseTable3 = fixedForwardRef(function BaseTable3<TType = unknown>(props: Table3Props<TType>, ref: React.Ref<Table3Ref>) {\n const table3 = useTable3<TType>(props, ref);\n\n const gridAttributes = {\n 'data-table-editing-mode': table3.meta.editing?.isEditing\n ? table3.meta.editing?.isDetailedMode\n ? 'detailed'\n : 'normal'\n : undefined,\n 'data-has-changes': table3.meta.editing.isDirty ? 'true' : undefined,\n enableHorizontalArrowKeyNavigation: table3.meta.editing.isEditing,\n };\n\n const rowsById = table3.instance.getCoreRowModel().rowsById;\n const hasAlertErrors = table3.meta.editing.getErrorsShownInAlert().some(row => {\n if (table3.meta.server._experimentalDataLoader2) {\n // consumers of dataloader2 need to run a cleanup function, as this would otherwise return false when pages are unloaded.\n return true;\n }\n\n if (rowsById[row.rowId]) {\n return true;\n }\n\n // Keep the alert when the row is hidden by filtering (or pagination) but still has unsaved edits.\n return table3.meta.editing.hasChanges(row.rowId);\n });\n\n const hasCreateWorkflow = table3.meta.editing.isEnabled && props.onEditingCreate;\n const [hasScrollbar, isScrolled] = isTableScrolled(table3.ref);\n\n let createWorkflow;\n\n if (hasCreateWorkflow) {\n createWorkflow = (\n <CreateNewRow\n buttonRef={table3.meta.editing.createRowButtonRef}\n hasScrollbar={hasScrollbar}\n table={table3.instance}\n tableMeta={table3.meta}\n tableRef={table3.ref}\n />\n );\n }\n\n return (\n <Table>\n <Table.Toolbar<TType> table={table3}>\n {table3.meta.editing.isEnabled ? (\n <Editing scrollToIndex={table3.renderer.scrollToIndex} table={table3.instance} />\n ) : null}\n </Table.Toolbar>\n {hasAlertErrors ? (\n <Alert\n className=\"mb-4\"\n scrollToIndex={table3.renderer.scrollToIndex}\n table={table3.instance}\n tableRef={table3.ref}\n />\n ) : null}\n <Table.Grid<TType>\n {...gridAttributes}\n data-taco=\"table3\"\n footerRows={hasCreateWorkflow && isScrolled ? createWorkflow : undefined}\n table={table3}>\n {hasCreateWorkflow ? (\n <>\n <TemporaryRows\n createRowButtonRef={table3.meta.editing.createRowButtonRef}\n hasScrollbar={hasScrollbar}\n table={table3.instance}\n tableMeta={table3.meta}\n tableRef={table3.ref}\n />\n {isScrolled ? null : createWorkflow}\n </>\n ) : null}\n </Table.Grid>\n </Table>\n );\n});\n\nexport const Table3 = fixedForwardRef(function Table3<TType = unknown>(props: Table3Props<TType>, ref: React.Ref<Table3Ref>) {\n const stringifiedChildren = String(props.children);\n // we force a remount (using key) when the child columns change because there are too many places to add children as an effect\n // this is cheaper from a complexity perspective, and probably performance wise as well\n const key = React.useMemo(() => String('tableKey_' + stringifiedChildren), [stringifiedChildren]);\n return <BaseTable3<TType> {...props} key={key} ref={ref} />;\n}) as (<TType = unknown>(props: Table3Props<TType> & React.RefAttributes<Table3Ref>) => React.JSX.Element) & {\n Column: typeof Column;\n Group: typeof Group;\n};\nTable3.Column = Column;\nTable3.Group = Group;\n\nexport type {\n Table3Ref,\n Table3Props,\n Table3ColumnProps,\n Table3GroupProps,\n Table3EditingSaveHandler,\n Table3EditingValidatorFn,\n Table3Texts,\n Table3FeatureProps,\n Table3CommonProps,\n Table3WithoutEditingWithClientProps,\n Table3WithoutEditingWithServerProps,\n Table3WithEditingProps,\n Table3WithEditingWithClientProps,\n Table3WithEditingWithServerProps,\n Table3EditingChangeHandler,\n Table3EditingCreateHandler,\n} from './types';\n"],"names":["BaseTable3","React","Table3"],"mappings":";;;;;;;;;;AAeA,MAAM,SAEF,MAAM;AACV,OAAO,cAAc;AAErB,MAAM,QAAoC,MAAM;AAChD,MAAM,cAAc;AAEpB,MAAM,aAAa,gBAAgB,SAASA,YAA4B,OAA2B,KAA2B;AAC1H,QAAM,SAAS,UAAiB,OAAO,GAAG;AAE1C,QAAM,iBAAiB;AAAA,IACnB,2BAA2B,OAAO,KAAK,SAAS,YAC1C,OAAO,KAAK,SAAS,iBACjB,aACA,WACJ;AAAA,IACN,oBAAoB,OAAO,KAAK,QAAQ,UAAU,SAAS;AAAA,IAC3D,oCAAoC,OAAO,KAAK,QAAQ;AAAA,EAAA;AAG5D,QAAM,WAAW,OAAO,SAAS,gBAAA,EAAkB;AACnD,QAAM,iBAAiB,OAAO,KAAK,QAAQ,wBAAwB,KAAK,CAAA,QAAO;AAC3E,QAAI,OAAO,KAAK,OAAO,0BAA0B;AAE7C,aAAO;AAAA,IACX;AAEA,QAAI,SAAS,IAAI,KAAK,GAAG;AACrB,aAAO;AAAA,IACX;AAGA,WAAO,OAAO,KAAK,QAAQ,WAAW,IAAI,KAAK;AAAA,EACnD,CAAC;AAED,QAAM,oBAAoB,OAAO,KAAK,QAAQ,aAAa,MAAM;AACjE,QAAM,CAAC,cAAc,UAAU,IAAI,gBAAgB,OAAO,GAAG;AAE7D,MAAI;AAEJ,MAAI,mBAAmB;AACnB,qBACIC,+BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,WAAW,OAAO,KAAK,QAAQ;AAAA,QAC/B;AAAA,QACA,OAAO,OAAO;AAAA,QACd,WAAW,OAAO;AAAA,QAClB,UAAU,OAAO;AAAA,MAAA;AAAA,IAAA;AAAA,EAG7B;AAEA,SACIA,+BAAA,cAAC,OAAA,MACGA,+BAAA,cAAC,MAAM,SAAN,EAAqB,OAAO,OAAA,GACxB,OAAO,KAAK,QAAQ,yDAChB,SAAA,EAAQ,eAAe,OAAO,SAAS,eAAe,OAAO,OAAO,SAAA,CAAU,IAC/E,IACR,GACC,iBACGA,+BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,WAAU;AAAA,MACV,eAAe,OAAO,SAAS;AAAA,MAC/B,OAAO,OAAO;AAAA,MACd,UAAU,OAAO;AAAA,IAAA;AAAA,EAAA,IAErB,MACJA,+BAAA;AAAA,IAAC,MAAM;AAAA,IAAN;AAAA,MACI,GAAG;AAAA,MACJ,aAAU;AAAA,MACV,YAAY,qBAAqB,aAAa,iBAAiB;AAAA,MAC/D,OAAO;AAAA,IAAA;AAAA,IACN,oBACGA,+BAAA,cAAAA,eAAA,UAAA,MACIA,+BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,oBAAoB,OAAO,KAAK,QAAQ;AAAA,QACxC;AAAA,QACA,OAAO,OAAO;AAAA,QACd,WAAW,OAAO;AAAA,QAClB,UAAU,OAAO;AAAA,MAAA;AAAA,IAAA,GAEpB,aAAa,OAAO,cACzB,IACA;AAAA,EAAA,CAEZ;AAER,CAAC;AAEM,MAAM,SAAS,gBAAgB,SAASC,QAAwB,OAA2B,KAA2B;AACzH,QAAM,sBAAsB,OAAO,MAAM,QAAQ;AAGjD,QAAM,MAAMD,eAAM,QAAQ,MAAM,OAAO,cAAc,mBAAmB,GAAG,CAAC,mBAAmB,CAAC;AAChG,SAAOA,+BAAA,cAAC,YAAA,EAAmB,GAAG,OAAO,KAAU,KAAU;AAC7D,CAAC;AAID,OAAO,SAAS;AAChB,OAAO,QAAQ;"}
1
+ {"version":3,"file":"Table3.js","sources":["../../../src/components/Table3/Table3.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Table } from '@/primitives/Table/Core/Table';\nimport { fixedForwardRef } from '@/types';\n\nimport { Alert } from './components/Editing/Alert';\nimport { CreateNewRow } from './components/Row/Editing/CreateNewRow';\nimport { TemporaryRows } from './components/Row/Editing/TemporaryRow';\nimport { Editing } from './components/Toolbar/Editing/Editing';\nimport type { Table3Props, Table3Ref, Table3ColumnProps, Table3GroupProps } from './types';\nimport { useTable3 } from './useTable3';\nimport { isTableScrolled } from './util/editing';\n\nimport './style.css';\n\nconst Column: React.FC<Table3ColumnProps<unknown>> & {\n <TType = unknown>(_: Table3ColumnProps<TType>): null;\n} = () => null;\nColumn.displayName = 'Table3Column';\n\nconst Group: React.FC<Table3GroupProps> = () => null;\nGroup.displayName = 'Table3Group';\n\nconst BaseTable3 = fixedForwardRef(function BaseTable3<TType = unknown>(props: Table3Props<TType>, ref: React.Ref<Table3Ref>) {\n const table3 = useTable3<TType>(props, ref);\n\n const gridAttributes = {\n 'data-table-editing-mode': table3.meta.editing?.isEditing\n ? table3.meta.editing?.isDetailedMode\n ? 'detailed'\n : 'normal'\n : undefined,\n 'data-has-changes': table3.meta.editing.isDirty ? 'true' : undefined,\n enableHorizontalArrowKeyNavigation: table3.meta.editing.isEditing,\n };\n\n const rowsById = table3.instance.getCoreRowModel().rowsById;\n const hasAlertErrors = table3.meta.editing.getErrorsShownInAlert().some(row => {\n if (table3.meta.server._experimentalDataLoader2) {\n // consumers of dataloader2 need to run a cleanup function, as this would otherwise return false when pages are unloaded.\n return true;\n }\n\n if (rowsById[row.rowId]) {\n return true;\n }\n\n // Keep the alert when the row is hidden by filtering (or pagination) but still has unsaved edits.\n return table3.meta.editing.hasChanges(row.rowId);\n });\n\n const hasCreateWorkflow = table3.meta.editing.isEnabled && props.onEditingCreate;\n const [hasScrollbar, isScrolled] = isTableScrolled(table3.ref);\n\n let createWorkflow;\n\n if (hasCreateWorkflow) {\n createWorkflow = (\n <CreateNewRow\n buttonRef={table3.meta.editing.createRowButtonRef}\n hasScrollbar={hasScrollbar}\n table={table3.instance}\n tableMeta={table3.meta}\n tableRef={table3.ref}\n />\n );\n }\n\n return (\n <Table>\n <Table.Toolbar<TType> table={table3}>\n {table3.meta.editing.isEnabled ? (\n <Editing scrollToIndex={table3.renderer.scrollToIndex} table={table3.instance} />\n ) : null}\n </Table.Toolbar>\n {hasAlertErrors ? (\n <Alert\n className=\"mb-4\"\n scrollToIndex={table3.renderer.scrollToIndex}\n table={table3.instance}\n tableRef={table3.ref}\n />\n ) : null}\n <Table.Grid<TType>\n {...gridAttributes}\n data-taco=\"table3\"\n footerRows={hasCreateWorkflow && isScrolled ? createWorkflow : undefined}\n table={table3}>\n {hasCreateWorkflow ? (\n <>\n <TemporaryRows\n createRowButtonRef={table3.meta.editing.createRowButtonRef}\n hasScrollbar={hasScrollbar}\n table={table3.instance}\n tableMeta={table3.meta}\n tableRef={table3.ref}\n />\n {isScrolled ? null : createWorkflow}\n </>\n ) : null}\n </Table.Grid>\n </Table>\n );\n});\n\nexport const Table3 = fixedForwardRef(function Table3<TType = unknown>(props: Table3Props<TType>, ref: React.Ref<Table3Ref>) {\n const stringifiedChildren = String(props.children);\n // we force a remount (using key) when the child columns change because there are too many places to add children as an effect\n // this is cheaper from a complexity perspective, and probably performance wise as well\n const key = React.useMemo(() => String('tableKey_' + stringifiedChildren), [stringifiedChildren]);\n return <BaseTable3<TType> {...props} key={key} ref={ref} />;\n}) as (<TType = unknown>(props: Table3Props<TType> & React.RefAttributes<Table3Ref>) => React.JSX.Element) & {\n Column: typeof Column;\n Group: typeof Group;\n};\nTable3.Column = Column;\nTable3.Group = Group;\n\nexport type {\n Table3Ref,\n Table3Props,\n Table3ColumnProps,\n Table3GroupProps,\n RowActionConfig,\n Table3EditingSaveHandler,\n Table3EditingValidatorFn,\n Table3Texts,\n Table3FeatureProps,\n Table3CommonProps,\n Table3WithoutEditingWithClientProps,\n Table3WithoutEditingWithServerProps,\n Table3WithEditingProps,\n Table3WithEditingWithClientProps,\n Table3WithEditingWithServerProps,\n Table3EditingChangeHandler,\n Table3EditingCreateHandler,\n} from './types';\n"],"names":["BaseTable3","React","Table3"],"mappings":";;;;;;;;;;AAeA,MAAM,SAEF,MAAM;AACV,OAAO,cAAc;AAErB,MAAM,QAAoC,MAAM;AAChD,MAAM,cAAc;AAEpB,MAAM,aAAa,gBAAgB,SAASA,YAA4B,OAA2B,KAA2B;AAC1H,QAAM,SAAS,UAAiB,OAAO,GAAG;AAE1C,QAAM,iBAAiB;AAAA,IACnB,2BAA2B,OAAO,KAAK,SAAS,YAC1C,OAAO,KAAK,SAAS,iBACjB,aACA,WACJ;AAAA,IACN,oBAAoB,OAAO,KAAK,QAAQ,UAAU,SAAS;AAAA,IAC3D,oCAAoC,OAAO,KAAK,QAAQ;AAAA,EAAA;AAG5D,QAAM,WAAW,OAAO,SAAS,gBAAA,EAAkB;AACnD,QAAM,iBAAiB,OAAO,KAAK,QAAQ,wBAAwB,KAAK,CAAA,QAAO;AAC3E,QAAI,OAAO,KAAK,OAAO,0BAA0B;AAE7C,aAAO;AAAA,IACX;AAEA,QAAI,SAAS,IAAI,KAAK,GAAG;AACrB,aAAO;AAAA,IACX;AAGA,WAAO,OAAO,KAAK,QAAQ,WAAW,IAAI,KAAK;AAAA,EACnD,CAAC;AAED,QAAM,oBAAoB,OAAO,KAAK,QAAQ,aAAa,MAAM;AACjE,QAAM,CAAC,cAAc,UAAU,IAAI,gBAAgB,OAAO,GAAG;AAE7D,MAAI;AAEJ,MAAI,mBAAmB;AACnB,qBACIC,+BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,WAAW,OAAO,KAAK,QAAQ;AAAA,QAC/B;AAAA,QACA,OAAO,OAAO;AAAA,QACd,WAAW,OAAO;AAAA,QAClB,UAAU,OAAO;AAAA,MAAA;AAAA,IAAA;AAAA,EAG7B;AAEA,SACIA,+BAAA,cAAC,OAAA,MACGA,+BAAA,cAAC,MAAM,SAAN,EAAqB,OAAO,OAAA,GACxB,OAAO,KAAK,QAAQ,yDAChB,SAAA,EAAQ,eAAe,OAAO,SAAS,eAAe,OAAO,OAAO,SAAA,CAAU,IAC/E,IACR,GACC,iBACGA,+BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,WAAU;AAAA,MACV,eAAe,OAAO,SAAS;AAAA,MAC/B,OAAO,OAAO;AAAA,MACd,UAAU,OAAO;AAAA,IAAA;AAAA,EAAA,IAErB,MACJA,+BAAA;AAAA,IAAC,MAAM;AAAA,IAAN;AAAA,MACI,GAAG;AAAA,MACJ,aAAU;AAAA,MACV,YAAY,qBAAqB,aAAa,iBAAiB;AAAA,MAC/D,OAAO;AAAA,IAAA;AAAA,IACN,oBACGA,+BAAA,cAAAA,eAAA,UAAA,MACIA,+BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,oBAAoB,OAAO,KAAK,QAAQ;AAAA,QACxC;AAAA,QACA,OAAO,OAAO;AAAA,QACd,WAAW,OAAO;AAAA,QAClB,UAAU,OAAO;AAAA,MAAA;AAAA,IAAA,GAEpB,aAAa,OAAO,cACzB,IACA;AAAA,EAAA,CAEZ;AAER,CAAC;AAEM,MAAM,SAAS,gBAAgB,SAASC,QAAwB,OAA2B,KAA2B;AACzH,QAAM,sBAAsB,OAAO,MAAM,QAAQ;AAGjD,QAAM,MAAMD,eAAM,QAAQ,MAAM,OAAO,cAAc,mBAAmB,GAAG,CAAC,mBAAmB,CAAC;AAChG,SAAOA,+BAAA,cAAC,YAAA,EAAmB,GAAG,OAAO,KAAU,KAAU;AAC7D,CAAC;AAID,OAAO,SAAS;AAChB,OAAO,QAAQ;"}