@j2-health/design-system 0.4.0 → 0.5.0

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 (44) hide show
  1. package/README.md +31 -11
  2. package/dist/index.cjs +4 -0
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.ts +1 -0
  5. package/dist/index.js +4 -0
  6. package/dist/index.js.map +1 -1
  7. package/dist/src/components/barchart/BarChart.cjs +2 -2
  8. package/dist/src/components/barchart/BarChart.cjs.map +1 -1
  9. package/dist/src/components/barchart/BarChart.js +2 -2
  10. package/dist/src/components/barchart/BarChart.js.map +1 -1
  11. package/dist/src/components/input/AntdInput.d.ts +5 -5
  12. package/dist/src/components/input/AntdSearchInput.d.ts +5 -5
  13. package/dist/src/components/manageColumns/ManageColumnsItem.cjs +76 -0
  14. package/dist/src/components/manageColumns/ManageColumnsItem.cjs.map +1 -0
  15. package/dist/src/components/manageColumns/ManageColumnsItem.d.ts +7 -0
  16. package/dist/src/components/manageColumns/ManageColumnsItem.js +76 -0
  17. package/dist/src/components/manageColumns/ManageColumnsItem.js.map +1 -0
  18. package/dist/src/components/manageColumns/ManageColumnsPanel.cjs +79 -0
  19. package/dist/src/components/manageColumns/ManageColumnsPanel.cjs.map +1 -0
  20. package/dist/src/components/manageColumns/ManageColumnsPanel.d.ts +18 -0
  21. package/dist/src/components/manageColumns/ManageColumnsPanel.js +79 -0
  22. package/dist/src/components/manageColumns/ManageColumnsPanel.js.map +1 -0
  23. package/dist/src/components/manageColumns/SelectAll.cjs +27 -0
  24. package/dist/src/components/manageColumns/SelectAll.cjs.map +1 -0
  25. package/dist/src/components/manageColumns/SelectAll.d.ts +15 -0
  26. package/dist/src/components/manageColumns/SelectAll.js +27 -0
  27. package/dist/src/components/manageColumns/SelectAll.js.map +1 -0
  28. package/dist/src/components/manageColumns/index.d.ts +4 -0
  29. package/dist/src/components/vennDiagram/VennDiagram.cjs +1 -1
  30. package/dist/src/components/vennDiagram/VennDiagram.cjs.map +1 -1
  31. package/dist/src/components/vennDiagram/VennDiagram.js +1 -1
  32. package/dist/src/components/vennDiagram/VennDiagram.js.map +1 -1
  33. package/dist/src/index.d.ts +1 -1
  34. package/dist/tailwind.cjs +4 -0
  35. package/dist/tailwind.cjs.map +1 -1
  36. package/dist/tailwind.config.d.ts +6 -0
  37. package/dist/tailwind.js +4 -0
  38. package/dist/tailwind.js.map +1 -1
  39. package/package.json +28 -14
  40. package/src/stylesheets/base.css +322 -0
  41. package/src/stylesheets/fonts.css +1 -0
  42. package/src/stylesheets/index.css +3 -327
  43. package/src/stylesheets/tailwind-v3.css +3 -0
  44. package/src/stylesheets/tailwind.css +4 -0
package/README.md CHANGED
@@ -47,11 +47,9 @@ The package ships a prebuilt bundle plus type declarations, and expects the
47
47
  consuming app to provide the peer dependencies listed in `package.json` (react,
48
48
  antd, formik, highcharts, tailwindcss, ...).
49
49
 
50
- > **Tailwind v3 only.** The preset is a Tailwind 3 config. Installing Tailwind
51
- > without a version pin gets you v4, which does not satisfy the
52
- > `tailwindcss@^3.4.14` peer range — npm reports it as a warning and installs it
53
- > anyway, so the mismatch is easy to miss. Pin it:
54
- > `npm i -D tailwindcss@^3.4.14`.
50
+ Tailwind 3.4 and Tailwind 4 are both supported. The package keeps its JavaScript
51
+ preset so existing Tailwind 3 consumers do not need to migrate with the design
52
+ system. Tailwind 4 consumers load the same preset explicitly with `@config`.
55
53
 
56
54
  Wire it up in three places:
57
55
 
@@ -69,21 +67,43 @@ Wire it up in three places:
69
67
  import '@j2-health/design-system/style.css'
70
68
  ```
71
69
 
70
+ With Tailwind 3, import the legacy stylesheet as the first statement in your
71
+ root stylesheet:
72
+
72
73
  ```css
73
- /* your root stylesheet — processed by YOUR Tailwind/PostCSS build.
74
- This @import must be the FIRST statement in the file: it carries an
75
- @import of its own (the Rubik webfont), and CSS drops an @import that
76
- follows other rules. */
77
74
  @import '@j2-health/design-system/stylesheets/index.css';
78
75
  ```
79
76
 
80
- **This file is your Tailwind entry point.** It supplies `@tailwind base`,
77
+ **This file is your Tailwind 3 entry point.** It supplies `@tailwind base`,
81
78
  `@tailwind components`, and `@tailwind utilities` along with the design
82
79
  tokens and base element styles, so remove those directives from your own
83
80
  stylesheet — keeping both emits every Tailwind layer twice.
84
81
 
82
+ With Tailwind 4, install the separate PostCSS plugin:
83
+
84
+ ```bash
85
+ npm install --save-dev @tailwindcss/postcss
86
+ ```
87
+
88
+ Replace `tailwindcss: {}` with `'@tailwindcss/postcss': {}` in your PostCSS
89
+ config, then use the Tailwind 4 stylesheet entry and load your JavaScript
90
+ config explicitly:
91
+
92
+ ```css
93
+ @import '@j2-health/design-system/stylesheets/tailwind.css';
94
+ @config '../../tailwind.config.ts';
95
+ ```
96
+
97
+ Adjust the `@config` path relative to the stylesheet containing it. Tailwind
98
+ 4 no longer discovers JavaScript config files automatically. The Tailwind 4
99
+ entry scans the package's compiled components and emits each Tailwind layer
100
+ once.
101
+
85
102
  3. **Tailwind** — use the preset and scan the package's compiled output so
86
- utility classes used inside components are generated by your build:
103
+ utility classes used inside components are generated by your build. This
104
+ config works with Tailwind 3 and can be loaded by Tailwind 4 through the
105
+ `@config` directive above. Tailwind 4 scans the package from its stylesheet;
106
+ the package glob remains necessary for Tailwind 3:
87
107
 
88
108
  ```ts
89
109
  // tailwind.config.ts
package/dist/index.cjs CHANGED
@@ -22,6 +22,7 @@ const Input = require("./src/components/input/Input.cjs");
22
22
  const InputNumber = require("./src/components/inputnumber/InputNumber.cjs");
23
23
  const LegacyNavMenu = require("./src/components/legacyNavMenu/LegacyNavMenu.cjs");
24
24
  const ListPopover = require("./src/components/listpopover/ListPopover.cjs");
25
+ const ManageColumnsPanel = require("./src/components/manageColumns/ManageColumnsPanel.cjs");
25
26
  const Menu = require("./src/components/menu/Menu.cjs");
26
27
  const Modal = require("./src/components/modal/Modal.cjs");
27
28
  const useFilterField = require("./src/components/filterform/useFilterField.cjs");
@@ -33,6 +34,7 @@ const Progress = require("./src/components/progress/Progress.cjs");
33
34
  const Radio = require("./src/components/radio/Radio.cjs");
34
35
  const Rate = require("./src/components/rate/Rate.cjs");
35
36
  const Select = require("./src/components/select/Select.cjs");
37
+ const SelectAll = require("./src/components/manageColumns/SelectAll.cjs");
36
38
  const Skeleton = require("./src/components/skeleton/Skeleton.cjs");
37
39
  const Spinner = require("./src/components/spinner/Spinner.cjs");
38
40
  const Steps = require("./src/components/steps/Steps.cjs");
@@ -76,6 +78,7 @@ exports.Input = Input.Input;
76
78
  exports.InputNumber = InputNumber.InputNumber;
77
79
  exports.LegacyNavMenu = LegacyNavMenu.LegacyNavMenu;
78
80
  exports.ListPopover = ListPopover.ListPopover;
81
+ exports.ManageColumnsPanel = ManageColumnsPanel.ManageColumnsPanel;
79
82
  exports.Menu = Menu.Menu;
80
83
  exports.Modal = Modal.Modal;
81
84
  exports.MultiValueTextOperatorOptions = useFilterField.MultiValueTextOperatorOptions;
@@ -90,6 +93,7 @@ exports.Radio = Radio.Radio;
90
93
  exports.RadioGroup = Radio.RadioGroup;
91
94
  exports.Rate = Rate.Rate;
92
95
  exports.Select = Select.Select;
96
+ exports.SelectAll = SelectAll.SelectAll;
93
97
  exports.Skeleton = Skeleton.Skeleton;
94
98
  exports.Spinner = Spinner.Spinner;
95
99
  exports.Steps = Steps.Steps;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index.d.ts CHANGED
@@ -17,6 +17,7 @@ export * from './src/components/form/index.js';
17
17
  export * from './src/components/input/index.js';
18
18
  export * from './src/components/inputnumber/index.js';
19
19
  export * from './src/components/listpopover/index.js';
20
+ export * from './src/components/manageColumns/index.js';
20
21
  export * from './src/components/menu/index.js';
21
22
  export * from './src/components/message/index.js';
22
23
  export * from './src/components/modal/index.js';
package/dist/index.js CHANGED
@@ -20,6 +20,7 @@ import { Input } from "./src/components/input/Input.js";
20
20
  import { InputNumber } from "./src/components/inputnumber/InputNumber.js";
21
21
  import { LegacyNavMenu } from "./src/components/legacyNavMenu/LegacyNavMenu.js";
22
22
  import { ListPopover } from "./src/components/listpopover/ListPopover.js";
23
+ import { ManageColumnsPanel } from "./src/components/manageColumns/ManageColumnsPanel.js";
23
24
  import { Menu } from "./src/components/menu/Menu.js";
24
25
  import { Modal } from "./src/components/modal/Modal.js";
25
26
  import { MultiValueTextOperatorOptions, operatorOptionsFor } from "./src/components/filterform/useFilterField.js";
@@ -31,6 +32,7 @@ import { Progress } from "./src/components/progress/Progress.js";
31
32
  import { Radio, RadioGroup } from "./src/components/radio/Radio.js";
32
33
  import { Rate } from "./src/components/rate/Rate.js";
33
34
  import { Select } from "./src/components/select/Select.js";
35
+ import { SelectAll } from "./src/components/manageColumns/SelectAll.js";
34
36
  import { Skeleton } from "./src/components/skeleton/Skeleton.js";
35
37
  import { Spinner } from "./src/components/spinner/Spinner.js";
36
38
  import { Steps } from "./src/components/steps/Steps.js";
@@ -72,6 +74,7 @@ export {
72
74
  InputNumber,
73
75
  LegacyNavMenu,
74
76
  ListPopover,
77
+ ManageColumnsPanel,
75
78
  Menu,
76
79
  Modal,
77
80
  MultiValueTextOperatorOptions,
@@ -84,6 +87,7 @@ export {
84
87
  RadioGroup,
85
88
  Rate,
86
89
  Select,
90
+ SelectAll,
87
91
  Skeleton,
88
92
  Spinner,
89
93
  Steps,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -3,8 +3,8 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const antd = require("antd");
5
5
  const react = require("@highcharts/react");
6
- require("@highcharts/react/options/Accessibility.js");
7
- require("@highcharts/react/options/Exporting.js");
6
+ require("@highcharts/react/modules/Accessibility.js");
7
+ require("@highcharts/react/modules/Exporting.js");
8
8
  const chart_module = require("./chart.module.css.cjs");
9
9
  const server = require("react-dom/server");
10
10
  const BarChart = ({
@@ -1 +1 @@
1
- {"version":3,"file":"BarChart.cjs","sources":["../../../../src/components/barchart/BarChart.tsx"],"sourcesContent":["import { theme } from 'antd'\nimport type * as Highcharts from 'highcharts'\nimport {\n Chart as HighchartsReact,\n type HighchartsReactRefObject,\n} from '@highcharts/react'\nimport '@highcharts/react/options/Accessibility.js'\nimport '@highcharts/react/options/Exporting.js'\nimport styles from './chart.module.css'\nimport { renderToString } from 'react-dom/server'\n\ntype Series = {\n name?: string\n data: Highcharts.PointOptionsObject[] | number[]\n color?: string\n hoverColor?: string\n}\n\ntype BarChartProps = {\n categories: string[]\n series: Series[]\n min: number\n max: number | undefined | null\n tickInterval: number | undefined\n tickFormat?: (value: number) => string\n xAxisTitle?: string\n yAxisTitle?: string\n gridLineColor?: string\n gridLineDashStyle?: Highcharts.DashStyleValue\n xAxisLabelMaxLines?: number\n tooltip: (\n category: string | number | undefined,\n value: number | null | undefined,\n seriesName: string | undefined\n ) => React.ReactNode\n chartRef?: React.RefObject<HighchartsReactRefObject>\n exporting?: Highcharts.ExportingOptions\n maxBars?: number\n barsWidth?: number\n height?: number\n width?: number\n}\n\nconst BarChart = ({\n categories,\n series,\n min,\n max,\n tickInterval,\n tickFormat,\n xAxisTitle,\n yAxisTitle,\n gridLineColor,\n gridLineDashStyle,\n xAxisLabelMaxLines,\n tooltip,\n exporting,\n chartRef,\n height,\n width,\n maxBars = 50,\n barsWidth = undefined,\n}: BarChartProps) => {\n const limitedCategories = categories.slice(0, maxBars)\n const limitedSeries = series.map((s) => ({\n ...s,\n data: s.data.slice(0, maxBars),\n }))\n\n const { token } = theme.useToken()\n\n const baseFont: Highcharts.CSSObject = {\n fontSize: `${token.fontSize}px`,\n fontFamily: token.fontFamily,\n color: token.colorText,\n }\n\n const options: Highcharts.Options = {\n credits: {\n enabled: false,\n },\n chart: {\n type: 'column',\n ...(height ? { height } : {}),\n ...(width ? { width } : {}),\n },\n plotOptions: {\n column: {\n borderRadius: series[0].data.length > 5 ? '20%' : '15%',\n ...(barsWidth !== undefined ? { pointWidth: barsWidth } : {}),\n },\n },\n exporting: {\n ...exporting,\n enabled: false,\n chartOptions: {\n ...exporting?.chartOptions,\n title: {\n align: 'left',\n text: exporting?.chartOptions?.title?.text,\n style: {\n fontSize: `${token.fontSize}px`,\n fontFamily: 'sans-serif',\n color: token.colorText,\n ...exporting?.chartOptions?.title?.style,\n },\n },\n series: limitedSeries.map((s) => ({\n type: 'column',\n color: s.color ? s.color : '#253761', // --j2-blue-9\n })),\n legend: exporting?.chartOptions?.legend || { enabled: false },\n },\n },\n title: {\n text: '',\n },\n xAxis: {\n categories: limitedCategories,\n title: xAxisTitle\n ? {\n text: xAxisTitle,\n style: { ...baseFont, color: token.colorTextDescription },\n }\n : undefined,\n labels: {\n y: 30,\n style: baseFont,\n ...(xAxisLabelMaxLines\n ? {\n useHTML: true,\n formatter: function (\n this: Highcharts.AxisLabelsFormatterContextObject\n ) {\n return `<div style=\"overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: ${xAxisLabelMaxLines}; -webkit-box-orient: vertical; text-align: center;\">${this.value}</div>`\n },\n }\n : {}),\n },\n },\n yAxis: {\n min: min,\n max: max,\n endOnTick: true,\n gridLineDashStyle: gridLineDashStyle || 'Dot',\n gridLineColor: gridLineColor || 'white',\n title: yAxisTitle\n ? {\n text: yAxisTitle,\n style: { ...baseFont, color: token.colorTextDescription },\n x: -10,\n }\n : undefined,\n tickInterval: tickInterval,\n labels: {\n formatter: tickFormat\n ? ({ value }) => tickFormat(value as number)\n : undefined,\n style: baseFont,\n },\n },\n legend: {\n enabled: false,\n },\n series: limitedSeries.map((s) => ({\n data: s.data,\n name: s.name,\n type: 'column',\n color: s.color || 'var(--j2-blue-11)',\n states: {\n hover: {\n color: s.hoverColor || token.colorPrimaryTextHover,\n },\n },\n })),\n tooltip: {\n useHTML: true,\n outside: true,\n backgroundColor: 'transparent',\n shadow: false,\n padding: 0,\n style: { zIndex: 9999 },\n formatter: function (this) {\n return renderToString(\n <div className={styles.tooltip}>\n {tooltip(this.key, this.y, this.series.name)}\n </div>\n )\n },\n },\n }\n\n return (\n <HighchartsReact\n ref={chartRef}\n options={options}\n containerProps={{ className: 'highcharts-light' }}\n />\n )\n}\n\nexport { BarChart }\n"],"names":["theme","renderToString","jsx","styles","HighchartsReact"],"mappings":";;;;;;;;;AA2CA,MAAM,WAAW,CAAC;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,YAAY;AACd,MAAqB;;AACnB,QAAM,oBAAoB,WAAW,MAAM,GAAG,OAAO;AACrD,QAAM,gBAAgB,OAAO,IAAI,CAAC,OAAO;AAAA,IACvC,GAAG;AAAA,IACH,MAAM,EAAE,KAAK,MAAM,GAAG,OAAO;AAAA,EAAA,EAC7B;AAEF,QAAM,EAAE,MAAA,IAAUA,KAAAA,MAAM,SAAA;AAExB,QAAM,WAAiC;AAAA,IACrC,UAAU,GAAG,MAAM,QAAQ;AAAA,IAC3B,YAAY,MAAM;AAAA,IAClB,OAAO,MAAM;AAAA,EAAA;AAGf,QAAM,UAA8B;AAAA,IAClC,SAAS;AAAA,MACP,SAAS;AAAA,IAAA;AAAA,IAEX,OAAO;AAAA,MACL,MAAM;AAAA,MACN,GAAI,SAAS,EAAE,OAAA,IAAW,CAAA;AAAA,MAC1B,GAAI,QAAQ,EAAE,UAAU,CAAA;AAAA,IAAC;AAAA,IAE3B,aAAa;AAAA,MACX,QAAQ;AAAA,QACN,cAAc,OAAO,CAAC,EAAE,KAAK,SAAS,IAAI,QAAQ;AAAA,QAClD,GAAI,cAAc,SAAY,EAAE,YAAY,UAAA,IAAc,CAAA;AAAA,MAAC;AAAA,IAC7D;AAAA,IAEF,WAAW;AAAA,MACT,GAAG;AAAA,MACH,SAAS;AAAA,MACT,cAAc;AAAA,QACZ,GAAG,uCAAW;AAAA,QACd,OAAO;AAAA,UACL,OAAO;AAAA,UACP,OAAM,kDAAW,iBAAX,mBAAyB,UAAzB,mBAAgC;AAAA,UACtC,OAAO;AAAA,YACL,UAAU,GAAG,MAAM,QAAQ;AAAA,YAC3B,YAAY;AAAA,YACZ,OAAO,MAAM;AAAA,YACb,IAAG,kDAAW,iBAAX,mBAAyB,UAAzB,mBAAgC;AAAA,UAAA;AAAA,QACrC;AAAA,QAEF,QAAQ,cAAc,IAAI,CAAC,OAAO;AAAA,UAChC,MAAM;AAAA,UACN,OAAO,EAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA,QAAA,EAC3B;AAAA,QACF,UAAQ,4CAAW,iBAAX,mBAAyB,WAAU,EAAE,SAAS,MAAA;AAAA,MAAM;AAAA,IAC9D;AAAA,IAEF,OAAO;AAAA,MACL,MAAM;AAAA,IAAA;AAAA,IAER,OAAO;AAAA,MACL,YAAY;AAAA,MACZ,OAAO,aACH;AAAA,QACE,MAAM;AAAA,QACN,OAAO,EAAE,GAAG,UAAU,OAAO,MAAM,qBAAA;AAAA,MAAqB,IAE1D;AAAA,MACJ,QAAQ;AAAA,QACN,GAAG;AAAA,QACH,OAAO;AAAA,QACP,GAAI,qBACA;AAAA,UACE,SAAS;AAAA,UACT,WAAW,WAET;AACA,mBAAO,oGAAoG,kBAAkB,wDAAwD,KAAK,KAAK;AAAA,UACjM;AAAA,QAAA,IAEF,CAAA;AAAA,MAAC;AAAA,IACP;AAAA,IAEF,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MACX,mBAAmB,qBAAqB;AAAA,MACxC,eAAe,iBAAiB;AAAA,MAChC,OAAO,aACH;AAAA,QACE,MAAM;AAAA,QACN,OAAO,EAAE,GAAG,UAAU,OAAO,MAAM,qBAAA;AAAA,QACnC,GAAG;AAAA,MAAA,IAEL;AAAA,MACJ;AAAA,MACA,QAAQ;AAAA,QACN,WAAW,aACP,CAAC,EAAE,YAAY,WAAW,KAAe,IACzC;AAAA,QACJ,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,IAEF,QAAQ;AAAA,MACN,SAAS;AAAA,IAAA;AAAA,IAEX,QAAQ,cAAc,IAAI,CAAC,OAAO;AAAA,MAChC,MAAM,EAAE;AAAA,MACR,MAAM,EAAE;AAAA,MACR,MAAM;AAAA,MACN,OAAO,EAAE,SAAS;AAAA,MAClB,QAAQ;AAAA,QACN,OAAO;AAAA,UACL,OAAO,EAAE,cAAc,MAAM;AAAA,QAAA;AAAA,MAC/B;AAAA,IACF,EACA;AAAA,IACF,SAAS;AAAA,MACP,SAAS;AAAA,MACT,SAAS;AAAA,MACT,iBAAiB;AAAA,MACjB,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,OAAO,EAAE,QAAQ,KAAA;AAAA,MACjB,WAAW,WAAgB;AACzB,eAAOC,OAAAA;AAAAA,UACLC,2BAAAA,IAAC,OAAA,EAAI,WAAWC,aAAAA,QAAO,SACpB,UAAA,QAAQ,KAAK,KAAK,KAAK,GAAG,KAAK,OAAO,IAAI,EAAA,CAC7C;AAAA,QAAA;AAAA,MAEJ;AAAA,IAAA;AAAA,EACF;AAGF,SACED,2BAAAA;AAAAA,IAACE,MAAAA;AAAAA,IAAA;AAAA,MACC,KAAK;AAAA,MACL;AAAA,MACA,gBAAgB,EAAE,WAAW,mBAAA;AAAA,IAAmB;AAAA,EAAA;AAGtD;;"}
1
+ {"version":3,"file":"BarChart.cjs","sources":["../../../../src/components/barchart/BarChart.tsx"],"sourcesContent":["import { theme } from 'antd'\nimport type * as Highcharts from 'highcharts'\nimport {\n Chart as HighchartsReact,\n type HighchartsReactRefObject,\n} from '@highcharts/react'\n// `modules/`, not `options/`. @highcharts/react 5 moved the module entry\n// points and left the old `options/` files in the package still importing\n// `highcharts/esm/…`, while the Chart component now loads\n// `highcharts/es-modules/masters/…`. Those are two different Highcharts\n// instances, so the old path composes the module onto one the chart never\n// uses: no error, no missing export, the module just stops taking effect.\nimport '@highcharts/react/modules/Accessibility.js'\nimport '@highcharts/react/modules/Exporting.js'\nimport styles from './chart.module.css'\nimport { renderToString } from 'react-dom/server'\n\ntype Series = {\n name?: string\n data: Highcharts.PointOptionsObject[] | number[]\n color?: string\n hoverColor?: string\n}\n\ntype BarChartProps = {\n categories: string[]\n series: Series[]\n min: number\n max: number | undefined | null\n tickInterval: number | undefined\n tickFormat?: (value: number) => string\n xAxisTitle?: string\n yAxisTitle?: string\n gridLineColor?: string\n gridLineDashStyle?: Highcharts.DashStyleValue\n xAxisLabelMaxLines?: number\n tooltip: (\n category: string | number | undefined,\n value: number | null | undefined,\n seriesName: string | undefined\n ) => React.ReactNode\n chartRef?: React.RefObject<HighchartsReactRefObject>\n exporting?: Highcharts.ExportingOptions\n maxBars?: number\n barsWidth?: number\n height?: number\n width?: number\n}\n\nconst BarChart = ({\n categories,\n series,\n min,\n max,\n tickInterval,\n tickFormat,\n xAxisTitle,\n yAxisTitle,\n gridLineColor,\n gridLineDashStyle,\n xAxisLabelMaxLines,\n tooltip,\n exporting,\n chartRef,\n height,\n width,\n maxBars = 50,\n barsWidth = undefined,\n}: BarChartProps) => {\n const limitedCategories = categories.slice(0, maxBars)\n const limitedSeries = series.map((s) => ({\n ...s,\n data: s.data.slice(0, maxBars),\n }))\n\n const { token } = theme.useToken()\n\n const baseFont: Highcharts.CSSObject = {\n fontSize: `${token.fontSize}px`,\n fontFamily: token.fontFamily,\n color: token.colorText,\n }\n\n const options: Highcharts.Options = {\n credits: {\n enabled: false,\n },\n chart: {\n type: 'column',\n ...(height ? { height } : {}),\n ...(width ? { width } : {}),\n },\n plotOptions: {\n column: {\n borderRadius: series[0].data.length > 5 ? '20%' : '15%',\n ...(barsWidth !== undefined ? { pointWidth: barsWidth } : {}),\n },\n },\n exporting: {\n ...exporting,\n enabled: false,\n chartOptions: {\n ...exporting?.chartOptions,\n title: {\n align: 'left',\n text: exporting?.chartOptions?.title?.text,\n style: {\n fontSize: `${token.fontSize}px`,\n fontFamily: 'sans-serif',\n color: token.colorText,\n ...exporting?.chartOptions?.title?.style,\n },\n },\n series: limitedSeries.map((s) => ({\n type: 'column',\n color: s.color ? s.color : '#253761', // --j2-blue-9\n })),\n legend: exporting?.chartOptions?.legend || { enabled: false },\n },\n },\n title: {\n text: '',\n },\n xAxis: {\n categories: limitedCategories,\n title: xAxisTitle\n ? {\n text: xAxisTitle,\n style: { ...baseFont, color: token.colorTextDescription },\n }\n : undefined,\n labels: {\n y: 30,\n style: baseFont,\n ...(xAxisLabelMaxLines\n ? {\n useHTML: true,\n formatter: function (\n this: Highcharts.AxisLabelsFormatterContextObject\n ) {\n return `<div style=\"overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: ${xAxisLabelMaxLines}; -webkit-box-orient: vertical; text-align: center;\">${this.value}</div>`\n },\n }\n : {}),\n },\n },\n yAxis: {\n min: min,\n max: max,\n endOnTick: true,\n gridLineDashStyle: gridLineDashStyle || 'Dot',\n gridLineColor: gridLineColor || 'white',\n title: yAxisTitle\n ? {\n text: yAxisTitle,\n style: { ...baseFont, color: token.colorTextDescription },\n x: -10,\n }\n : undefined,\n tickInterval: tickInterval,\n labels: {\n formatter: tickFormat\n ? ({ value }) => tickFormat(value as number)\n : undefined,\n style: baseFont,\n },\n },\n legend: {\n enabled: false,\n },\n series: limitedSeries.map((s) => ({\n data: s.data,\n name: s.name,\n type: 'column',\n color: s.color || 'var(--j2-blue-11)',\n states: {\n hover: {\n color: s.hoverColor || token.colorPrimaryTextHover,\n },\n },\n })),\n tooltip: {\n useHTML: true,\n outside: true,\n backgroundColor: 'transparent',\n shadow: false,\n padding: 0,\n style: { zIndex: 9999 },\n formatter: function (this) {\n return renderToString(\n <div className={styles.tooltip}>\n {tooltip(this.key, this.y, this.series.name)}\n </div>\n )\n },\n },\n }\n\n return (\n <HighchartsReact\n ref={chartRef}\n options={options}\n containerProps={{ className: 'highcharts-light' }}\n />\n )\n}\n\nexport { BarChart }\n"],"names":["theme","renderToString","jsx","styles","HighchartsReact"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { theme } from "antd";
3
3
  import { Chart } from "@highcharts/react";
4
- import "@highcharts/react/options/Accessibility.js";
5
- import "@highcharts/react/options/Exporting.js";
4
+ import "@highcharts/react/modules/Accessibility.js";
5
+ import "@highcharts/react/modules/Exporting.js";
6
6
  import styles from "./chart.module.css.js";
7
7
  import { renderToString } from "react-dom/server";
8
8
  const BarChart = ({
@@ -1 +1 @@
1
- {"version":3,"file":"BarChart.js","sources":["../../../../src/components/barchart/BarChart.tsx"],"sourcesContent":["import { theme } from 'antd'\nimport type * as Highcharts from 'highcharts'\nimport {\n Chart as HighchartsReact,\n type HighchartsReactRefObject,\n} from '@highcharts/react'\nimport '@highcharts/react/options/Accessibility.js'\nimport '@highcharts/react/options/Exporting.js'\nimport styles from './chart.module.css'\nimport { renderToString } from 'react-dom/server'\n\ntype Series = {\n name?: string\n data: Highcharts.PointOptionsObject[] | number[]\n color?: string\n hoverColor?: string\n}\n\ntype BarChartProps = {\n categories: string[]\n series: Series[]\n min: number\n max: number | undefined | null\n tickInterval: number | undefined\n tickFormat?: (value: number) => string\n xAxisTitle?: string\n yAxisTitle?: string\n gridLineColor?: string\n gridLineDashStyle?: Highcharts.DashStyleValue\n xAxisLabelMaxLines?: number\n tooltip: (\n category: string | number | undefined,\n value: number | null | undefined,\n seriesName: string | undefined\n ) => React.ReactNode\n chartRef?: React.RefObject<HighchartsReactRefObject>\n exporting?: Highcharts.ExportingOptions\n maxBars?: number\n barsWidth?: number\n height?: number\n width?: number\n}\n\nconst BarChart = ({\n categories,\n series,\n min,\n max,\n tickInterval,\n tickFormat,\n xAxisTitle,\n yAxisTitle,\n gridLineColor,\n gridLineDashStyle,\n xAxisLabelMaxLines,\n tooltip,\n exporting,\n chartRef,\n height,\n width,\n maxBars = 50,\n barsWidth = undefined,\n}: BarChartProps) => {\n const limitedCategories = categories.slice(0, maxBars)\n const limitedSeries = series.map((s) => ({\n ...s,\n data: s.data.slice(0, maxBars),\n }))\n\n const { token } = theme.useToken()\n\n const baseFont: Highcharts.CSSObject = {\n fontSize: `${token.fontSize}px`,\n fontFamily: token.fontFamily,\n color: token.colorText,\n }\n\n const options: Highcharts.Options = {\n credits: {\n enabled: false,\n },\n chart: {\n type: 'column',\n ...(height ? { height } : {}),\n ...(width ? { width } : {}),\n },\n plotOptions: {\n column: {\n borderRadius: series[0].data.length > 5 ? '20%' : '15%',\n ...(barsWidth !== undefined ? { pointWidth: barsWidth } : {}),\n },\n },\n exporting: {\n ...exporting,\n enabled: false,\n chartOptions: {\n ...exporting?.chartOptions,\n title: {\n align: 'left',\n text: exporting?.chartOptions?.title?.text,\n style: {\n fontSize: `${token.fontSize}px`,\n fontFamily: 'sans-serif',\n color: token.colorText,\n ...exporting?.chartOptions?.title?.style,\n },\n },\n series: limitedSeries.map((s) => ({\n type: 'column',\n color: s.color ? s.color : '#253761', // --j2-blue-9\n })),\n legend: exporting?.chartOptions?.legend || { enabled: false },\n },\n },\n title: {\n text: '',\n },\n xAxis: {\n categories: limitedCategories,\n title: xAxisTitle\n ? {\n text: xAxisTitle,\n style: { ...baseFont, color: token.colorTextDescription },\n }\n : undefined,\n labels: {\n y: 30,\n style: baseFont,\n ...(xAxisLabelMaxLines\n ? {\n useHTML: true,\n formatter: function (\n this: Highcharts.AxisLabelsFormatterContextObject\n ) {\n return `<div style=\"overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: ${xAxisLabelMaxLines}; -webkit-box-orient: vertical; text-align: center;\">${this.value}</div>`\n },\n }\n : {}),\n },\n },\n yAxis: {\n min: min,\n max: max,\n endOnTick: true,\n gridLineDashStyle: gridLineDashStyle || 'Dot',\n gridLineColor: gridLineColor || 'white',\n title: yAxisTitle\n ? {\n text: yAxisTitle,\n style: { ...baseFont, color: token.colorTextDescription },\n x: -10,\n }\n : undefined,\n tickInterval: tickInterval,\n labels: {\n formatter: tickFormat\n ? ({ value }) => tickFormat(value as number)\n : undefined,\n style: baseFont,\n },\n },\n legend: {\n enabled: false,\n },\n series: limitedSeries.map((s) => ({\n data: s.data,\n name: s.name,\n type: 'column',\n color: s.color || 'var(--j2-blue-11)',\n states: {\n hover: {\n color: s.hoverColor || token.colorPrimaryTextHover,\n },\n },\n })),\n tooltip: {\n useHTML: true,\n outside: true,\n backgroundColor: 'transparent',\n shadow: false,\n padding: 0,\n style: { zIndex: 9999 },\n formatter: function (this) {\n return renderToString(\n <div className={styles.tooltip}>\n {tooltip(this.key, this.y, this.series.name)}\n </div>\n )\n },\n },\n }\n\n return (\n <HighchartsReact\n ref={chartRef}\n options={options}\n containerProps={{ className: 'highcharts-light' }}\n />\n )\n}\n\nexport { BarChart }\n"],"names":["HighchartsReact"],"mappings":"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"}
1
+ {"version":3,"file":"BarChart.js","sources":["../../../../src/components/barchart/BarChart.tsx"],"sourcesContent":["import { theme } from 'antd'\nimport type * as Highcharts from 'highcharts'\nimport {\n Chart as HighchartsReact,\n type HighchartsReactRefObject,\n} from '@highcharts/react'\n// `modules/`, not `options/`. @highcharts/react 5 moved the module entry\n// points and left the old `options/` files in the package still importing\n// `highcharts/esm/…`, while the Chart component now loads\n// `highcharts/es-modules/masters/…`. Those are two different Highcharts\n// instances, so the old path composes the module onto one the chart never\n// uses: no error, no missing export, the module just stops taking effect.\nimport '@highcharts/react/modules/Accessibility.js'\nimport '@highcharts/react/modules/Exporting.js'\nimport styles from './chart.module.css'\nimport { renderToString } from 'react-dom/server'\n\ntype Series = {\n name?: string\n data: Highcharts.PointOptionsObject[] | number[]\n color?: string\n hoverColor?: string\n}\n\ntype BarChartProps = {\n categories: string[]\n series: Series[]\n min: number\n max: number | undefined | null\n tickInterval: number | undefined\n tickFormat?: (value: number) => string\n xAxisTitle?: string\n yAxisTitle?: string\n gridLineColor?: string\n gridLineDashStyle?: Highcharts.DashStyleValue\n xAxisLabelMaxLines?: number\n tooltip: (\n category: string | number | undefined,\n value: number | null | undefined,\n seriesName: string | undefined\n ) => React.ReactNode\n chartRef?: React.RefObject<HighchartsReactRefObject>\n exporting?: Highcharts.ExportingOptions\n maxBars?: number\n barsWidth?: number\n height?: number\n width?: number\n}\n\nconst BarChart = ({\n categories,\n series,\n min,\n max,\n tickInterval,\n tickFormat,\n xAxisTitle,\n yAxisTitle,\n gridLineColor,\n gridLineDashStyle,\n xAxisLabelMaxLines,\n tooltip,\n exporting,\n chartRef,\n height,\n width,\n maxBars = 50,\n barsWidth = undefined,\n}: BarChartProps) => {\n const limitedCategories = categories.slice(0, maxBars)\n const limitedSeries = series.map((s) => ({\n ...s,\n data: s.data.slice(0, maxBars),\n }))\n\n const { token } = theme.useToken()\n\n const baseFont: Highcharts.CSSObject = {\n fontSize: `${token.fontSize}px`,\n fontFamily: token.fontFamily,\n color: token.colorText,\n }\n\n const options: Highcharts.Options = {\n credits: {\n enabled: false,\n },\n chart: {\n type: 'column',\n ...(height ? { height } : {}),\n ...(width ? { width } : {}),\n },\n plotOptions: {\n column: {\n borderRadius: series[0].data.length > 5 ? '20%' : '15%',\n ...(barsWidth !== undefined ? { pointWidth: barsWidth } : {}),\n },\n },\n exporting: {\n ...exporting,\n enabled: false,\n chartOptions: {\n ...exporting?.chartOptions,\n title: {\n align: 'left',\n text: exporting?.chartOptions?.title?.text,\n style: {\n fontSize: `${token.fontSize}px`,\n fontFamily: 'sans-serif',\n color: token.colorText,\n ...exporting?.chartOptions?.title?.style,\n },\n },\n series: limitedSeries.map((s) => ({\n type: 'column',\n color: s.color ? s.color : '#253761', // --j2-blue-9\n })),\n legend: exporting?.chartOptions?.legend || { enabled: false },\n },\n },\n title: {\n text: '',\n },\n xAxis: {\n categories: limitedCategories,\n title: xAxisTitle\n ? {\n text: xAxisTitle,\n style: { ...baseFont, color: token.colorTextDescription },\n }\n : undefined,\n labels: {\n y: 30,\n style: baseFont,\n ...(xAxisLabelMaxLines\n ? {\n useHTML: true,\n formatter: function (\n this: Highcharts.AxisLabelsFormatterContextObject\n ) {\n return `<div style=\"overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: ${xAxisLabelMaxLines}; -webkit-box-orient: vertical; text-align: center;\">${this.value}</div>`\n },\n }\n : {}),\n },\n },\n yAxis: {\n min: min,\n max: max,\n endOnTick: true,\n gridLineDashStyle: gridLineDashStyle || 'Dot',\n gridLineColor: gridLineColor || 'white',\n title: yAxisTitle\n ? {\n text: yAxisTitle,\n style: { ...baseFont, color: token.colorTextDescription },\n x: -10,\n }\n : undefined,\n tickInterval: tickInterval,\n labels: {\n formatter: tickFormat\n ? ({ value }) => tickFormat(value as number)\n : undefined,\n style: baseFont,\n },\n },\n legend: {\n enabled: false,\n },\n series: limitedSeries.map((s) => ({\n data: s.data,\n name: s.name,\n type: 'column',\n color: s.color || 'var(--j2-blue-11)',\n states: {\n hover: {\n color: s.hoverColor || token.colorPrimaryTextHover,\n },\n },\n })),\n tooltip: {\n useHTML: true,\n outside: true,\n backgroundColor: 'transparent',\n shadow: false,\n padding: 0,\n style: { zIndex: 9999 },\n formatter: function (this) {\n return renderToString(\n <div className={styles.tooltip}>\n {tooltip(this.key, this.y, this.series.name)}\n </div>\n )\n },\n },\n }\n\n return (\n <HighchartsReact\n ref={chartRef}\n options={options}\n containerProps={{ className: 'highcharts-light' }}\n />\n )\n}\n\nexport { BarChart }\n"],"names":["HighchartsReact"],"mappings":";;;;;;;AAiDA,MAAM,WAAW,CAAC;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,YAAY;AACd,MAAqB;;AACnB,QAAM,oBAAoB,WAAW,MAAM,GAAG,OAAO;AACrD,QAAM,gBAAgB,OAAO,IAAI,CAAC,OAAO;AAAA,IACvC,GAAG;AAAA,IACH,MAAM,EAAE,KAAK,MAAM,GAAG,OAAO;AAAA,EAAA,EAC7B;AAEF,QAAM,EAAE,MAAA,IAAU,MAAM,SAAA;AAExB,QAAM,WAAiC;AAAA,IACrC,UAAU,GAAG,MAAM,QAAQ;AAAA,IAC3B,YAAY,MAAM;AAAA,IAClB,OAAO,MAAM;AAAA,EAAA;AAGf,QAAM,UAA8B;AAAA,IAClC,SAAS;AAAA,MACP,SAAS;AAAA,IAAA;AAAA,IAEX,OAAO;AAAA,MACL,MAAM;AAAA,MACN,GAAI,SAAS,EAAE,OAAA,IAAW,CAAA;AAAA,MAC1B,GAAI,QAAQ,EAAE,UAAU,CAAA;AAAA,IAAC;AAAA,IAE3B,aAAa;AAAA,MACX,QAAQ;AAAA,QACN,cAAc,OAAO,CAAC,EAAE,KAAK,SAAS,IAAI,QAAQ;AAAA,QAClD,GAAI,cAAc,SAAY,EAAE,YAAY,UAAA,IAAc,CAAA;AAAA,MAAC;AAAA,IAC7D;AAAA,IAEF,WAAW;AAAA,MACT,GAAG;AAAA,MACH,SAAS;AAAA,MACT,cAAc;AAAA,QACZ,GAAG,uCAAW;AAAA,QACd,OAAO;AAAA,UACL,OAAO;AAAA,UACP,OAAM,kDAAW,iBAAX,mBAAyB,UAAzB,mBAAgC;AAAA,UACtC,OAAO;AAAA,YACL,UAAU,GAAG,MAAM,QAAQ;AAAA,YAC3B,YAAY;AAAA,YACZ,OAAO,MAAM;AAAA,YACb,IAAG,kDAAW,iBAAX,mBAAyB,UAAzB,mBAAgC;AAAA,UAAA;AAAA,QACrC;AAAA,QAEF,QAAQ,cAAc,IAAI,CAAC,OAAO;AAAA,UAChC,MAAM;AAAA,UACN,OAAO,EAAE,QAAQ,EAAE,QAAQ;AAAA;AAAA,QAAA,EAC3B;AAAA,QACF,UAAQ,4CAAW,iBAAX,mBAAyB,WAAU,EAAE,SAAS,MAAA;AAAA,MAAM;AAAA,IAC9D;AAAA,IAEF,OAAO;AAAA,MACL,MAAM;AAAA,IAAA;AAAA,IAER,OAAO;AAAA,MACL,YAAY;AAAA,MACZ,OAAO,aACH;AAAA,QACE,MAAM;AAAA,QACN,OAAO,EAAE,GAAG,UAAU,OAAO,MAAM,qBAAA;AAAA,MAAqB,IAE1D;AAAA,MACJ,QAAQ;AAAA,QACN,GAAG;AAAA,QACH,OAAO;AAAA,QACP,GAAI,qBACA;AAAA,UACE,SAAS;AAAA,UACT,WAAW,WAET;AACA,mBAAO,oGAAoG,kBAAkB,wDAAwD,KAAK,KAAK;AAAA,UACjM;AAAA,QAAA,IAEF,CAAA;AAAA,MAAC;AAAA,IACP;AAAA,IAEF,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MACX,mBAAmB,qBAAqB;AAAA,MACxC,eAAe,iBAAiB;AAAA,MAChC,OAAO,aACH;AAAA,QACE,MAAM;AAAA,QACN,OAAO,EAAE,GAAG,UAAU,OAAO,MAAM,qBAAA;AAAA,QACnC,GAAG;AAAA,MAAA,IAEL;AAAA,MACJ;AAAA,MACA,QAAQ;AAAA,QACN,WAAW,aACP,CAAC,EAAE,YAAY,WAAW,KAAe,IACzC;AAAA,QACJ,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,IAEF,QAAQ;AAAA,MACN,SAAS;AAAA,IAAA;AAAA,IAEX,QAAQ,cAAc,IAAI,CAAC,OAAO;AAAA,MAChC,MAAM,EAAE;AAAA,MACR,MAAM,EAAE;AAAA,MACR,MAAM;AAAA,MACN,OAAO,EAAE,SAAS;AAAA,MAClB,QAAQ;AAAA,QACN,OAAO;AAAA,UACL,OAAO,EAAE,cAAc,MAAM;AAAA,QAAA;AAAA,MAC/B;AAAA,IACF,EACA;AAAA,IACF,SAAS;AAAA,MACP,SAAS;AAAA,MACT,SAAS;AAAA,MACT,iBAAiB;AAAA,MACjB,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,OAAO,EAAE,QAAQ,KAAA;AAAA,MACjB,WAAW,WAAgB;AACzB,eAAO;AAAA,UACL,oBAAC,OAAA,EAAI,WAAW,OAAO,SACpB,UAAA,QAAQ,KAAK,KAAK,KAAK,GAAG,KAAK,OAAO,IAAI,EAAA,CAC7C;AAAA,QAAA;AAAA,MAEJ;AAAA,IAAA;AAAA,EACF;AAGF,SACE;AAAA,IAACA;AAAAA,IAAA;AAAA,MACC,KAAK;AAAA,MACL;AAAA,MACA,gBAAgB,EAAE,WAAW,mBAAA;AAAA,IAAmB;AAAA,EAAA;AAGtD;"}
@@ -44,11 +44,6 @@ export declare const AntdInput: import('react').ForwardRefExoticComponent<{
44
44
  input?: React.CSSProperties;
45
45
  count?: React.CSSProperties;
46
46
  } | undefined>;
47
- prefix?: import('react').ReactNode;
48
- height?: number | string | undefined | undefined;
49
- width?: number | string | undefined | undefined;
50
- translate?: "yes" | "no" | undefined | undefined;
51
- content?: string | undefined | undefined;
52
47
  children?: import('react').ReactNode;
53
48
  form?: string | undefined | undefined;
54
49
  slot?: string | undefined | undefined;
@@ -58,6 +53,7 @@ export declare const AntdInput: import('react').ForwardRefExoticComponent<{
58
53
  suppressHydrationWarning?: boolean | undefined | undefined;
59
54
  className?: string | undefined | undefined;
60
55
  color?: string | undefined | undefined;
56
+ height?: number | string | undefined | undefined;
61
57
  id?: string | undefined | undefined;
62
58
  lang?: string | undefined | undefined;
63
59
  max?: number | string | undefined | undefined;
@@ -66,6 +62,7 @@ export declare const AntdInput: import('react').ForwardRefExoticComponent<{
66
62
  nonce?: string | undefined | undefined;
67
63
  part?: string | undefined | undefined;
68
64
  type?: import('@rc-component/input/lib/utils/types').LiteralUnion<"button" | "checkbox" | "color" | "date" | "datetime-local" | "email" | "file" | "hidden" | "image" | "month" | "number" | "password" | "radio" | "range" | "reset" | "search" | "submit" | "tel" | "text" | "time" | "url" | "week", string> | undefined;
65
+ width?: number | string | undefined | undefined;
69
66
  role?: import('react').AriaRole | undefined;
70
67
  tabIndex?: number | undefined | undefined;
71
68
  "aria-activedescendant"?: string | undefined | undefined;
@@ -298,7 +295,9 @@ export declare const AntdInput: import('react').ForwardRefExoticComponent<{
298
295
  step?: number | string | undefined | undefined;
299
296
  draggable?: (boolean | "true" | "false") | undefined;
300
297
  hidden?: boolean | undefined | undefined;
298
+ content?: string | undefined | undefined;
301
299
  multiple?: boolean | undefined | undefined;
300
+ translate?: "yes" | "no" | undefined | undefined;
302
301
  defaultChecked?: boolean | undefined | undefined;
303
302
  defaultValue?: string | number | readonly string[] | undefined;
304
303
  suppressContentEditableWarning?: boolean | undefined | undefined;
@@ -314,6 +313,7 @@ export declare const AntdInput: import('react').ForwardRefExoticComponent<{
314
313
  about?: string | undefined | undefined;
315
314
  datatype?: string | undefined | undefined;
316
315
  inlist?: any;
316
+ prefix?: import('react').ReactNode;
317
317
  property?: string | undefined | undefined;
318
318
  rel?: string | undefined | undefined;
319
319
  resource?: string | undefined | undefined;
@@ -56,11 +56,6 @@ export declare const AntdSearchInput: import('react').ForwardRefExoticComponent<
56
56
  addonAfter?: import('react').ReactNode;
57
57
  bordered?: boolean | undefined;
58
58
  variant?: import('antd/es/config-provider').Variant | undefined;
59
- prefix?: import('react').ReactNode;
60
- height?: number | string | undefined | undefined;
61
- width?: number | string | undefined | undefined;
62
- translate?: "yes" | "no" | undefined | undefined;
63
- content?: string | undefined | undefined;
64
59
  children?: import('react').ReactNode;
65
60
  form?: string | undefined | undefined;
66
61
  slot?: string | undefined | undefined;
@@ -70,6 +65,7 @@ export declare const AntdSearchInput: import('react').ForwardRefExoticComponent<
70
65
  suppressHydrationWarning?: boolean | undefined | undefined;
71
66
  className?: string | undefined | undefined;
72
67
  color?: string | undefined | undefined;
68
+ height?: number | string | undefined | undefined;
73
69
  id?: string | undefined | undefined;
74
70
  lang?: string | undefined | undefined;
75
71
  max?: number | string | undefined | undefined;
@@ -78,6 +74,7 @@ export declare const AntdSearchInput: import('react').ForwardRefExoticComponent<
78
74
  nonce?: string | undefined | undefined;
79
75
  part?: string | undefined | undefined;
80
76
  type?: import('@rc-component/input/lib/utils/types').LiteralUnion<"button" | "checkbox" | "color" | "date" | "datetime-local" | "email" | "file" | "hidden" | "image" | "month" | "number" | "password" | "radio" | "range" | "reset" | "search" | "submit" | "tel" | "text" | "time" | "url" | "week", string> | undefined;
77
+ width?: number | string | undefined | undefined;
81
78
  role?: import('react').AriaRole | undefined;
82
79
  tabIndex?: number | undefined | undefined;
83
80
  "aria-activedescendant"?: string | undefined | undefined;
@@ -310,7 +307,9 @@ export declare const AntdSearchInput: import('react').ForwardRefExoticComponent<
310
307
  step?: number | string | undefined | undefined;
311
308
  draggable?: (boolean | "true" | "false") | undefined;
312
309
  hidden?: boolean | undefined | undefined;
310
+ content?: string | undefined | undefined;
313
311
  multiple?: boolean | undefined | undefined;
312
+ translate?: "yes" | "no" | undefined | undefined;
314
313
  defaultChecked?: boolean | undefined | undefined;
315
314
  defaultValue?: string | number | readonly string[] | undefined;
316
315
  suppressContentEditableWarning?: boolean | undefined | undefined;
@@ -326,6 +325,7 @@ export declare const AntdSearchInput: import('react').ForwardRefExoticComponent<
326
325
  about?: string | undefined | undefined;
327
326
  datatype?: string | undefined | undefined;
328
327
  inlist?: any;
328
+ prefix?: import('react').ReactNode;
329
329
  property?: string | undefined | undefined;
330
330
  rel?: string | undefined | undefined;
331
331
  resource?: string | undefined | undefined;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const React = require("react");
5
+ const cx = require("classnames");
6
+ const react = require("@phosphor-icons/react");
7
+ const sortable = require("@dnd-kit/sortable");
8
+ const utilities = require("@dnd-kit/utilities");
9
+ const Checkbox = require("../checkbox/Checkbox.cjs");
10
+ const ManageColumnsItem = React.memo(function ManageColumnsItem2({
11
+ id,
12
+ label,
13
+ visible,
14
+ pinned,
15
+ onToggle
16
+ }) {
17
+ const handleToggle = React.useCallback(() => onToggle(id), [onToggle, id]);
18
+ const {
19
+ attributes,
20
+ listeners,
21
+ setNodeRef,
22
+ transform,
23
+ transition,
24
+ isDragging
25
+ } = sortable.useSortable({
26
+ id,
27
+ // Boolean shorthand only disables dragging, not dropping onto a pinned row.
28
+ disabled: { draggable: pinned, droppable: pinned }
29
+ });
30
+ const style = {
31
+ transform: utilities.CSS.Transform.toString(transform),
32
+ transition
33
+ };
34
+ return /* @__PURE__ */ jsxRuntime.jsxs(
35
+ "div",
36
+ {
37
+ ref: setNodeRef,
38
+ style,
39
+ className: cx(
40
+ "flex items-center justify-between gap-2 py-1.5 pl-2 -ml-2 bg-white rounded",
41
+ "has-[button:hover]:bg-j2-gray-2",
42
+ isDragging && "shadow-md z-10 relative",
43
+ pinned && "opacity-50"
44
+ ),
45
+ children: [
46
+ /* @__PURE__ */ jsxRuntime.jsx(
47
+ Checkbox.Checkbox,
48
+ {
49
+ checked: visible,
50
+ disabled: pinned,
51
+ onChange: pinned ? void 0 : handleToggle,
52
+ className: cx(
53
+ // No gap: antd's own .ant-checkbox-label already pads before children.
54
+ "flex items-center flex-1 min-w-0",
55
+ pinned ? "cursor-not-allowed" : "cursor-pointer"
56
+ ),
57
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-j2-lg text-j2-text", title: label, children: label })
58
+ }
59
+ ),
60
+ !pinned && /* @__PURE__ */ jsxRuntime.jsx(
61
+ "button",
62
+ {
63
+ type: "button",
64
+ ...attributes,
65
+ ...listeners,
66
+ "aria-label": `Drag to reorder ${label}`,
67
+ className: "p-1 text-j2-text cursor-grab active:cursor-grabbing",
68
+ children: /* @__PURE__ */ jsxRuntime.jsx(react.DotsSixIcon, { size: 16, weight: "bold", className: "rotate-90" })
69
+ }
70
+ )
71
+ ]
72
+ }
73
+ );
74
+ });
75
+ exports.ManageColumnsItem = ManageColumnsItem;
76
+ //# sourceMappingURL=ManageColumnsItem.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ManageColumnsItem.cjs","sources":["../../../../src/components/manageColumns/ManageColumnsItem.tsx"],"sourcesContent":["import { memo, useCallback } from 'react'\nimport cx from 'classnames'\nimport { DotsSixIcon } from '@phosphor-icons/react'\nimport { useSortable } from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\n\nimport { Checkbox } from '../checkbox'\n\nexport const ManageColumnsItem = memo(function ManageColumnsItem({\n id,\n label,\n visible,\n pinned,\n onToggle,\n}: {\n id: string\n label: string\n visible: boolean\n pinned: boolean\n onToggle: (id: string) => void\n}) {\n const handleToggle = useCallback(() => onToggle(id), [onToggle, id])\n\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({\n id,\n // Boolean shorthand only disables dragging, not dropping onto a pinned row.\n disabled: { draggable: pinned, droppable: pinned },\n })\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n }\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={cx(\n 'flex items-center justify-between gap-2 py-1.5 pl-2 -ml-2 bg-white rounded',\n 'has-[button:hover]:bg-j2-gray-2',\n isDragging && 'shadow-md z-10 relative',\n pinned && 'opacity-50'\n )}\n >\n <Checkbox\n checked={visible}\n disabled={pinned}\n onChange={pinned ? undefined : handleToggle}\n className={cx(\n // No gap: antd's own .ant-checkbox-label already pads before children.\n 'flex items-center flex-1 min-w-0',\n pinned ? 'cursor-not-allowed' : 'cursor-pointer'\n )}\n >\n <span className=\"truncate text-j2-lg text-j2-text\" title={label}>\n {label}\n </span>\n </Checkbox>\n {!pinned && (\n <button\n type=\"button\"\n {...attributes}\n {...listeners}\n aria-label={`Drag to reorder ${label}`}\n className=\"p-1 text-j2-text cursor-grab active:cursor-grabbing\"\n >\n <DotsSixIcon size={16} weight=\"bold\" className=\"rotate-90\" />\n </button>\n )}\n </div>\n )\n})\n"],"names":["memo","ManageColumnsItem","useCallback","useSortable","CSS","jsxs","jsx","Checkbox","DotsSixIcon"],"mappings":";;;;;;;;;AAQO,MAAM,oBAAoBA,MAAAA,KAAK,SAASC,mBAAkB;AAAA,EAC/D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AACD,QAAM,eAAeC,MAAAA,YAAY,MAAM,SAAS,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;AAEnE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACEC,qBAAY;AAAA,IACd;AAAA;AAAA,IAEA,UAAU,EAAE,WAAW,QAAQ,WAAW,OAAA;AAAA,EAAO,CAClD;AAED,QAAM,QAAQ;AAAA,IACZ,WAAWC,UAAAA,IAAI,UAAU,SAAS,SAAS;AAAA,IAC3C;AAAA,EAAA;AAGF,SACEC,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK;AAAA,MACL;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd,UAAU;AAAA,MAAA;AAAA,MAGZ,UAAA;AAAA,QAAAC,2BAAAA;AAAAA,UAACC,SAAAA;AAAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,UAAU;AAAA,YACV,UAAU,SAAS,SAAY;AAAA,YAC/B,WAAW;AAAA;AAAA,cAET;AAAA,cACA,SAAS,uBAAuB;AAAA,YAAA;AAAA,YAGlC,yCAAC,QAAA,EAAK,WAAU,oCAAmC,OAAO,OACvD,UAAA,MAAA,CACH;AAAA,UAAA;AAAA,QAAA;AAAA,QAED,CAAC,UACAD,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACJ,GAAG;AAAA,YACH,GAAG;AAAA,YACJ,cAAY,mBAAmB,KAAK;AAAA,YACpC,WAAU;AAAA,YAEV,yCAACE,MAAAA,aAAA,EAAY,MAAM,IAAI,QAAO,QAAO,WAAU,YAAA,CAAY;AAAA,UAAA;AAAA,QAAA;AAAA,MAC7D;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;;"}
@@ -0,0 +1,7 @@
1
+ export declare const ManageColumnsItem: import('react').NamedExoticComponent<{
2
+ id: string;
3
+ label: string;
4
+ visible: boolean;
5
+ pinned: boolean;
6
+ onToggle: (id: string) => void;
7
+ }>;
@@ -0,0 +1,76 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { memo, useCallback } from "react";
3
+ import cx from "classnames";
4
+ import { DotsSixIcon } from "@phosphor-icons/react";
5
+ import { useSortable } from "@dnd-kit/sortable";
6
+ import { CSS } from "@dnd-kit/utilities";
7
+ import { Checkbox } from "../checkbox/Checkbox.js";
8
+ const ManageColumnsItem = memo(function ManageColumnsItem2({
9
+ id,
10
+ label,
11
+ visible,
12
+ pinned,
13
+ onToggle
14
+ }) {
15
+ const handleToggle = useCallback(() => onToggle(id), [onToggle, id]);
16
+ const {
17
+ attributes,
18
+ listeners,
19
+ setNodeRef,
20
+ transform,
21
+ transition,
22
+ isDragging
23
+ } = useSortable({
24
+ id,
25
+ // Boolean shorthand only disables dragging, not dropping onto a pinned row.
26
+ disabled: { draggable: pinned, droppable: pinned }
27
+ });
28
+ const style = {
29
+ transform: CSS.Transform.toString(transform),
30
+ transition
31
+ };
32
+ return /* @__PURE__ */ jsxs(
33
+ "div",
34
+ {
35
+ ref: setNodeRef,
36
+ style,
37
+ className: cx(
38
+ "flex items-center justify-between gap-2 py-1.5 pl-2 -ml-2 bg-white rounded",
39
+ "has-[button:hover]:bg-j2-gray-2",
40
+ isDragging && "shadow-md z-10 relative",
41
+ pinned && "opacity-50"
42
+ ),
43
+ children: [
44
+ /* @__PURE__ */ jsx(
45
+ Checkbox,
46
+ {
47
+ checked: visible,
48
+ disabled: pinned,
49
+ onChange: pinned ? void 0 : handleToggle,
50
+ className: cx(
51
+ // No gap: antd's own .ant-checkbox-label already pads before children.
52
+ "flex items-center flex-1 min-w-0",
53
+ pinned ? "cursor-not-allowed" : "cursor-pointer"
54
+ ),
55
+ children: /* @__PURE__ */ jsx("span", { className: "truncate text-j2-lg text-j2-text", title: label, children: label })
56
+ }
57
+ ),
58
+ !pinned && /* @__PURE__ */ jsx(
59
+ "button",
60
+ {
61
+ type: "button",
62
+ ...attributes,
63
+ ...listeners,
64
+ "aria-label": `Drag to reorder ${label}`,
65
+ className: "p-1 text-j2-text cursor-grab active:cursor-grabbing",
66
+ children: /* @__PURE__ */ jsx(DotsSixIcon, { size: 16, weight: "bold", className: "rotate-90" })
67
+ }
68
+ )
69
+ ]
70
+ }
71
+ );
72
+ });
73
+ export {
74
+ ManageColumnsItem
75
+ };
76
+ //# sourceMappingURL=ManageColumnsItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ManageColumnsItem.js","sources":["../../../../src/components/manageColumns/ManageColumnsItem.tsx"],"sourcesContent":["import { memo, useCallback } from 'react'\nimport cx from 'classnames'\nimport { DotsSixIcon } from '@phosphor-icons/react'\nimport { useSortable } from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\n\nimport { Checkbox } from '../checkbox'\n\nexport const ManageColumnsItem = memo(function ManageColumnsItem({\n id,\n label,\n visible,\n pinned,\n onToggle,\n}: {\n id: string\n label: string\n visible: boolean\n pinned: boolean\n onToggle: (id: string) => void\n}) {\n const handleToggle = useCallback(() => onToggle(id), [onToggle, id])\n\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({\n id,\n // Boolean shorthand only disables dragging, not dropping onto a pinned row.\n disabled: { draggable: pinned, droppable: pinned },\n })\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n }\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={cx(\n 'flex items-center justify-between gap-2 py-1.5 pl-2 -ml-2 bg-white rounded',\n 'has-[button:hover]:bg-j2-gray-2',\n isDragging && 'shadow-md z-10 relative',\n pinned && 'opacity-50'\n )}\n >\n <Checkbox\n checked={visible}\n disabled={pinned}\n onChange={pinned ? undefined : handleToggle}\n className={cx(\n // No gap: antd's own .ant-checkbox-label already pads before children.\n 'flex items-center flex-1 min-w-0',\n pinned ? 'cursor-not-allowed' : 'cursor-pointer'\n )}\n >\n <span className=\"truncate text-j2-lg text-j2-text\" title={label}>\n {label}\n </span>\n </Checkbox>\n {!pinned && (\n <button\n type=\"button\"\n {...attributes}\n {...listeners}\n aria-label={`Drag to reorder ${label}`}\n className=\"p-1 text-j2-text cursor-grab active:cursor-grabbing\"\n >\n <DotsSixIcon size={16} weight=\"bold\" className=\"rotate-90\" />\n </button>\n )}\n </div>\n )\n})\n"],"names":["ManageColumnsItem"],"mappings":";;;;;;;AAQO,MAAM,oBAAoB,KAAK,SAASA,mBAAkB;AAAA,EAC/D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AACD,QAAM,eAAe,YAAY,MAAM,SAAS,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;AAEnE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE,YAAY;AAAA,IACd;AAAA;AAAA,IAEA,UAAU,EAAE,WAAW,QAAQ,WAAW,OAAA;AAAA,EAAO,CAClD;AAED,QAAM,QAAQ;AAAA,IACZ,WAAW,IAAI,UAAU,SAAS,SAAS;AAAA,IAC3C;AAAA,EAAA;AAGF,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK;AAAA,MACL;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd,UAAU;AAAA,MAAA;AAAA,MAGZ,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,UAAU;AAAA,YACV,UAAU,SAAS,SAAY;AAAA,YAC/B,WAAW;AAAA;AAAA,cAET;AAAA,cACA,SAAS,uBAAuB;AAAA,YAAA;AAAA,YAGlC,8BAAC,QAAA,EAAK,WAAU,oCAAmC,OAAO,OACvD,UAAA,MAAA,CACH;AAAA,UAAA;AAAA,QAAA;AAAA,QAED,CAAC,UACA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACJ,GAAG;AAAA,YACH,GAAG;AAAA,YACJ,cAAY,mBAAmB,KAAK;AAAA,YACpC,WAAU;AAAA,YAEV,8BAAC,aAAA,EAAY,MAAM,IAAI,QAAO,QAAO,WAAU,YAAA,CAAY;AAAA,UAAA;AAAA,QAAA;AAAA,MAC7D;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const React = require("react");
5
+ const core = require("@dnd-kit/core");
6
+ const sortable = require("@dnd-kit/sortable");
7
+ const ManageColumnsItem = require("./ManageColumnsItem.cjs");
8
+ const SelectAll = require("./SelectAll.cjs");
9
+ const noop = () => {
10
+ };
11
+ function ManageColumnsPanel({
12
+ columns,
13
+ onToggle,
14
+ onToggleAll,
15
+ onReorder,
16
+ description
17
+ }) {
18
+ const toggleable = React.useMemo(() => columns.filter((c) => !c.pinned), [columns]);
19
+ const visibleCount = toggleable.filter((c) => c.visible).length;
20
+ const sensors = core.useSensors(
21
+ core.useSensor(core.PointerSensor, { activationConstraint: { distance: 4 } }),
22
+ core.useSensor(core.KeyboardSensor, {
23
+ coordinateGetter: sortable.sortableKeyboardCoordinates
24
+ })
25
+ );
26
+ const pinnedIds = React.useMemo(
27
+ () => columns.filter((c) => c.pinned).map((c) => c.id),
28
+ [columns]
29
+ );
30
+ const itemIds = React.useMemo(() => toggleable.map((c) => c.id), [toggleable]);
31
+ const handleDragEnd = (event) => {
32
+ const { active, over } = event;
33
+ if (!over || active.id === over.id) return;
34
+ const from = itemIds.indexOf(active.id);
35
+ const to = itemIds.indexOf(over.id);
36
+ if (from === -1 || to === -1) return;
37
+ onReorder == null ? void 0 : onReorder([...pinnedIds, ...sortable.arrayMove(itemIds, from, to)]);
38
+ };
39
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
40
+ toggleable.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "sticky -top-4 z-10 -mt-4 -mx-4 pt-3 px-4 pb-2 mb-3 bg-white border-b border-j2-border-secondary flex items-baseline justify-between", children: [
41
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-semibold text-sm text-j2-text", children: [
42
+ visibleCount,
43
+ "/",
44
+ toggleable.length,
45
+ " Columns Shown"
46
+ ] }),
47
+ /* @__PURE__ */ jsxRuntime.jsx(
48
+ SelectAll.SelectAll,
49
+ {
50
+ columns,
51
+ onToggle,
52
+ onToggleAll
53
+ }
54
+ )
55
+ ] }),
56
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-j2-text mb-4", children: description }),
57
+ /* @__PURE__ */ jsxRuntime.jsx(
58
+ core.DndContext,
59
+ {
60
+ sensors,
61
+ collisionDetection: core.closestCenter,
62
+ onDragEnd: handleDragEnd,
63
+ children: /* @__PURE__ */ jsxRuntime.jsx(sortable.SortableContext, { items: itemIds, strategy: sortable.verticalListSortingStrategy, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col", children: columns.map((column) => /* @__PURE__ */ jsxRuntime.jsx(
64
+ ManageColumnsItem.ManageColumnsItem,
65
+ {
66
+ id: column.id,
67
+ label: column.label,
68
+ visible: column.pinned ? true : column.visible,
69
+ pinned: Boolean(column.pinned),
70
+ onToggle: onToggle ?? noop
71
+ },
72
+ column.id
73
+ )) }) })
74
+ }
75
+ )
76
+ ] });
77
+ }
78
+ exports.ManageColumnsPanel = ManageColumnsPanel;
79
+ //# sourceMappingURL=ManageColumnsPanel.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ManageColumnsPanel.cjs","sources":["../../../../src/components/manageColumns/ManageColumnsPanel.tsx"],"sourcesContent":["import { useMemo, type ReactNode } from 'react'\nimport {\n DndContext,\n KeyboardSensor,\n PointerSensor,\n closestCenter,\n useSensor,\n useSensors,\n type DragEndEvent,\n} from '@dnd-kit/core'\nimport {\n SortableContext,\n arrayMove,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable'\n\nimport { ManageColumnsItem } from './ManageColumnsItem'\nimport { SelectAll } from './SelectAll'\n\nconst noop = () => {}\n\nexport type ManageColumnsColumn = {\n id: string\n label: string\n visible: boolean\n /** Always visible, not draggable. Put pinned columns first in `columns`. */\n pinned?: boolean\n}\n\nexport type ManageColumnsPanelProps = {\n /** Columns in display order. Put any `pinned` columns first. */\n columns: ManageColumnsColumn[]\n onToggle?: (id: string) => void\n /** Batched select-all/clear-all handler — prefer this over the `onToggle` loop fallback, which can drop updates under a closure-captured state snapshot. */\n onToggleAll?: (ids: string[], visible: boolean) => void\n onReorder?: (orderedIds: string[]) => void\n description?: ReactNode\n}\n\nexport function ManageColumnsPanel({\n columns,\n onToggle,\n onToggleAll,\n onReorder,\n description,\n}: ManageColumnsPanelProps) {\n const toggleable = useMemo(() => columns.filter((c) => !c.pinned), [columns])\n const visibleCount = toggleable.filter((c) => c.visible).length\n\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 4 } }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n )\n\n const pinnedIds = useMemo(\n () => columns.filter((c) => c.pinned).map((c) => c.id),\n [columns]\n )\n const itemIds = useMemo(() => toggleable.map((c) => c.id), [toggleable])\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event\n if (!over || active.id === over.id) return\n const from = itemIds.indexOf(active.id as string)\n const to = itemIds.indexOf(over.id as string)\n if (from === -1 || to === -1) return\n onReorder?.([...pinnedIds, ...arrayMove(itemIds, from, to)])\n }\n\n return (\n <>\n {toggleable.length > 0 && (\n <div className=\"sticky -top-4 z-10 -mt-4 -mx-4 pt-3 px-4 pb-2 mb-3 bg-white border-b border-j2-border-secondary flex items-baseline justify-between\">\n <span className=\"font-semibold text-sm text-j2-text\">\n {visibleCount}/{toggleable.length} Columns Shown\n </span>\n <SelectAll\n columns={columns}\n onToggle={onToggle}\n onToggleAll={onToggleAll}\n />\n </div>\n )}\n {description && (\n <p className=\"text-sm text-j2-text mb-4\">{description}</p>\n )}\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n >\n <SortableContext items={itemIds} strategy={verticalListSortingStrategy}>\n <div className=\"flex flex-col\">\n {columns.map((column) => (\n <ManageColumnsItem\n key={column.id}\n id={column.id}\n label={column.label}\n visible={column.pinned ? true : column.visible}\n pinned={Boolean(column.pinned)}\n onToggle={onToggle ?? noop}\n />\n ))}\n </div>\n </SortableContext>\n </DndContext>\n </>\n )\n}\n"],"names":["useMemo","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","arrayMove","jsxs","Fragment","jsx","SelectAll","DndContext","closestCenter","SortableContext","verticalListSortingStrategy","ManageColumnsItem"],"mappings":";;;;;;;;AAoBA,MAAM,OAAO,MAAM;AAAC;AAoBb,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA4B;AAC1B,QAAM,aAAaA,MAAAA,QAAQ,MAAM,QAAQ,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;AAC5E,QAAM,eAAe,WAAW,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;AAEzD,QAAM,UAAUC,KAAAA;AAAAA,IACdC,KAAAA,UAAUC,KAAAA,eAAe,EAAE,sBAAsB,EAAE,UAAU,EAAA,GAAK;AAAA,IAClED,KAAAA,UAAUE,KAAAA,gBAAgB;AAAA,MACxB,kBAAkBC,SAAAA;AAAAA,IAAA,CACnB;AAAA,EAAA;AAGH,QAAM,YAAYL,MAAAA;AAAAA,IAChB,MAAM,QAAQ,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA,IACrD,CAAC,OAAO;AAAA,EAAA;AAEV,QAAM,UAAUA,MAAAA,QAAQ,MAAM,WAAW,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,UAAU,CAAC;AAEvE,QAAM,gBAAgB,CAAC,UAAwB;AAC7C,UAAM,EAAE,QAAQ,KAAA,IAAS;AACzB,QAAI,CAAC,QAAQ,OAAO,OAAO,KAAK,GAAI;AACpC,UAAM,OAAO,QAAQ,QAAQ,OAAO,EAAY;AAChD,UAAM,KAAK,QAAQ,QAAQ,KAAK,EAAY;AAC5C,QAAI,SAAS,MAAM,OAAO,GAAI;AAC9B,2CAAY,CAAC,GAAG,WAAW,GAAGM,SAAAA,UAAU,SAAS,MAAM,EAAE,CAAC;AAAA,EAC5D;AAEA,SACEC,2BAAAA,KAAAC,qBAAA,EACG,UAAA;AAAA,IAAA,WAAW,SAAS,KACnBD,2BAAAA,KAAC,OAAA,EAAI,WAAU,uIACb,UAAA;AAAA,MAAAA,2BAAAA,KAAC,QAAA,EAAK,WAAU,sCACb,UAAA;AAAA,QAAA;AAAA,QAAa;AAAA,QAAE,WAAW;AAAA,QAAO;AAAA,MAAA,GACpC;AAAA,MACAE,2BAAAA;AAAAA,QAACC,UAAAA;AAAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,GACF;AAAA,IAED,eACCD,2BAAAA,IAAC,KAAA,EAAE,WAAU,6BAA6B,UAAA,aAAY;AAAA,IAExDA,2BAAAA;AAAAA,MAACE,KAAAA;AAAAA,MAAA;AAAA,QACC;AAAA,QACA,oBAAoBC,KAAAA;AAAAA,QACpB,WAAW;AAAA,QAEX,UAAAH,2BAAAA,IAACI,0BAAA,EAAgB,OAAO,SAAS,UAAUC,SAAAA,6BACzC,UAAAL,2BAAAA,IAAC,OAAA,EAAI,WAAU,iBACZ,UAAA,QAAQ,IAAI,CAAC,WACZA,2BAAAA;AAAAA,UAACM,kBAAAA;AAAAA,UAAA;AAAA,YAEC,IAAI,OAAO;AAAA,YACX,OAAO,OAAO;AAAA,YACd,SAAS,OAAO,SAAS,OAAO,OAAO;AAAA,YACvC,QAAQ,QAAQ,OAAO,MAAM;AAAA,YAC7B,UAAU,YAAY;AAAA,UAAA;AAAA,UALjB,OAAO;AAAA,QAAA,CAOf,GACH,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;;"}