@esic-lab/data-core-ui 0.0.45 → 0.0.46

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.
package/dist/index.css CHANGED
@@ -465,6 +465,12 @@
465
465
  .h-\[47px\] {
466
466
  height: 47px;
467
467
  }
468
+ .h-\[250px\] {
469
+ height: 250px;
470
+ }
471
+ .h-\[314px\] {
472
+ height: 314px;
473
+ }
468
474
  .h-\[500px\] {
469
475
  height: 500px;
470
476
  }
@@ -480,12 +486,6 @@
480
486
  .h-screen {
481
487
  height: 100vh;
482
488
  }
483
- .max-h-\[250px\] {
484
- max-height: 250px;
485
- }
486
- .max-h-\[300px\] {
487
- max-height: 300px;
488
- }
489
489
  .min-h-\[120px\] {
490
490
  min-height: 120px;
491
491
  }
@@ -573,9 +573,6 @@
573
573
  .w-\[250px\] {
574
574
  width: 250px;
575
575
  }
576
- .w-\[300px\] {
577
- width: 300px;
578
- }
579
576
  .w-\[500px\] {
580
577
  width: 500px;
581
578
  }
@@ -588,6 +585,12 @@
588
585
  .w-full {
589
586
  width: 100%;
590
587
  }
588
+ .max-w-\[400px\] {
589
+ max-width: 400px;
590
+ }
591
+ .min-w-\[261px\] {
592
+ min-width: 261px;
593
+ }
591
594
  .min-w-\[400px\] {
592
595
  min-width: 400px;
593
596
  }
@@ -1001,6 +1004,9 @@
1001
1004
  .px-3 {
1002
1005
  padding-inline: calc(var(--spacing) * 3);
1003
1006
  }
1007
+ .px-4 {
1008
+ padding-inline: calc(var(--spacing) * 4);
1009
+ }
1004
1010
  .px-6 {
1005
1011
  padding-inline: calc(var(--spacing) * 6);
1006
1012
  }
@@ -1034,6 +1040,9 @@
1034
1040
  .py-\[10px\] {
1035
1041
  padding-block: 10px;
1036
1042
  }
1043
+ .pt-2 {
1044
+ padding-top: calc(var(--spacing) * 2);
1045
+ }
1037
1046
  .pb-2 {
1038
1047
  padding-bottom: calc(var(--spacing) * 2);
1039
1048
  }
package/dist/index.d.mts CHANGED
@@ -7,6 +7,7 @@ import { InputNumberProps, SelectProps } from 'antd';
7
7
  import { Color } from 'antd/es/color-picker';
8
8
  import { MessageInstance } from 'antd/es/message/interface';
9
9
  import { ItemType } from 'antd/es/breadcrumb/Breadcrumb';
10
+ import { ReactNode as ReactNode$1 } from '@tabler/icons-react';
10
11
 
11
12
  type ColorScale = 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900;
12
13
  type BaseColor = "primary" | "gray" | "green" | "red" | "yellow" | "blue";
@@ -542,4 +543,37 @@ declare const FilterPopUp: (filter: {
542
543
  handleSearch: (listFiler: string[]) => void;
543
544
  }) => react_jsx_runtime.JSX.Element;
544
545
 
545
- export { AntDModal, AntDataTable, Breadcrumbs, Calendar, Checkbox, CheckboxGroup, ColorPalettePickerBasic, ColorPickerBasic, DataTable, DatePickerBasic, DatePickerRange, FileUploader, FilterPopUp, GhostButton, HeadingPage, Indicator, InputField, InputFieldNumber, KpiSection, Loader, MenuNavBar, type MenuNavBarProps, PrimaryButton, ProgressBar, Radio, RadioGroup, SecondaryButton, SelectCustom, SelectField, SelectFieldGroup, SelectFieldStatus, SelectFieldStatusReport, SelectFieldTag, Sidebar, SortFilter, Switch, SwitchSelect, TabSelectionButton, TextAreaInput, TextInput, TopNavBar, messageError, messageInfo, messageLoading, messageSuccess, messageWarning, setMessageApi };
546
+ interface UserData {
547
+ id: string;
548
+ name: string;
549
+ profile: string;
550
+ }
551
+ interface ProfileSelectProp {
552
+ allUser: UserData[];
553
+ assignUser: UserData[];
554
+ mode: "show" | "showAssign" | "icon";
555
+ onUpdateAssignUser: (user: UserData, action?: "add" | "remove") => void;
556
+ }
557
+ declare function ProfileSelect({ allUser, assignUser, mode, onUpdateAssignUser, }: ProfileSelectProp): react_jsx_runtime.JSX.Element;
558
+
559
+ interface QRCodeGeneratorProps {
560
+ url: string;
561
+ previewSize?: number;
562
+ defaultExportSize?: number;
563
+ fileBaseName?: string;
564
+ }
565
+ declare const QRCodeGenerator: react.FC<QRCodeGeneratorProps>;
566
+
567
+ interface TabProjectProp {
568
+ tabOption: {
569
+ key: string;
570
+ label: string;
571
+ icon: ReactNode$1;
572
+ }[];
573
+ projectId: string;
574
+ now: string;
575
+ onChange: (key: string) => void;
576
+ }
577
+ declare function TabProject({ tabOption, now, onChange }: TabProjectProp): react_jsx_runtime.JSX.Element;
578
+
579
+ export { AntDModal, AntDataTable, Breadcrumbs, Calendar, Checkbox, CheckboxGroup, ColorPalettePickerBasic, ColorPickerBasic, DataTable, DatePickerBasic, DatePickerRange, FileUploader, FilterPopUp, GhostButton, HeadingPage, Indicator, InputField, InputFieldNumber, KpiSection, Loader, MenuNavBar, type MenuNavBarProps, PrimaryButton, ProfileSelect, ProgressBar, QRCodeGenerator, Radio, RadioGroup, SecondaryButton, SelectCustom, SelectField, SelectFieldGroup, SelectFieldStatus, SelectFieldStatusReport, SelectFieldTag, Sidebar, SortFilter, Switch, SwitchSelect, TabProject, TabSelectionButton, TextAreaInput, TextInput, TopNavBar, messageError, messageInfo, messageLoading, messageSuccess, messageWarning, setMessageApi };
package/dist/index.d.ts CHANGED
@@ -7,6 +7,7 @@ import { InputNumberProps, SelectProps } from 'antd';
7
7
  import { Color } from 'antd/es/color-picker';
8
8
  import { MessageInstance } from 'antd/es/message/interface';
9
9
  import { ItemType } from 'antd/es/breadcrumb/Breadcrumb';
10
+ import { ReactNode as ReactNode$1 } from '@tabler/icons-react';
10
11
 
11
12
  type ColorScale = 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900;
12
13
  type BaseColor = "primary" | "gray" | "green" | "red" | "yellow" | "blue";
@@ -542,4 +543,37 @@ declare const FilterPopUp: (filter: {
542
543
  handleSearch: (listFiler: string[]) => void;
543
544
  }) => react_jsx_runtime.JSX.Element;
544
545
 
545
- export { AntDModal, AntDataTable, Breadcrumbs, Calendar, Checkbox, CheckboxGroup, ColorPalettePickerBasic, ColorPickerBasic, DataTable, DatePickerBasic, DatePickerRange, FileUploader, FilterPopUp, GhostButton, HeadingPage, Indicator, InputField, InputFieldNumber, KpiSection, Loader, MenuNavBar, type MenuNavBarProps, PrimaryButton, ProgressBar, Radio, RadioGroup, SecondaryButton, SelectCustom, SelectField, SelectFieldGroup, SelectFieldStatus, SelectFieldStatusReport, SelectFieldTag, Sidebar, SortFilter, Switch, SwitchSelect, TabSelectionButton, TextAreaInput, TextInput, TopNavBar, messageError, messageInfo, messageLoading, messageSuccess, messageWarning, setMessageApi };
546
+ interface UserData {
547
+ id: string;
548
+ name: string;
549
+ profile: string;
550
+ }
551
+ interface ProfileSelectProp {
552
+ allUser: UserData[];
553
+ assignUser: UserData[];
554
+ mode: "show" | "showAssign" | "icon";
555
+ onUpdateAssignUser: (user: UserData, action?: "add" | "remove") => void;
556
+ }
557
+ declare function ProfileSelect({ allUser, assignUser, mode, onUpdateAssignUser, }: ProfileSelectProp): react_jsx_runtime.JSX.Element;
558
+
559
+ interface QRCodeGeneratorProps {
560
+ url: string;
561
+ previewSize?: number;
562
+ defaultExportSize?: number;
563
+ fileBaseName?: string;
564
+ }
565
+ declare const QRCodeGenerator: react.FC<QRCodeGeneratorProps>;
566
+
567
+ interface TabProjectProp {
568
+ tabOption: {
569
+ key: string;
570
+ label: string;
571
+ icon: ReactNode$1;
572
+ }[];
573
+ projectId: string;
574
+ now: string;
575
+ onChange: (key: string) => void;
576
+ }
577
+ declare function TabProject({ tabOption, now, onChange }: TabProjectProp): react_jsx_runtime.JSX.Element;
578
+
579
+ export { AntDModal, AntDataTable, Breadcrumbs, Calendar, Checkbox, CheckboxGroup, ColorPalettePickerBasic, ColorPickerBasic, DataTable, DatePickerBasic, DatePickerRange, FileUploader, FilterPopUp, GhostButton, HeadingPage, Indicator, InputField, InputFieldNumber, KpiSection, Loader, MenuNavBar, type MenuNavBarProps, PrimaryButton, ProfileSelect, ProgressBar, QRCodeGenerator, Radio, RadioGroup, SecondaryButton, SelectCustom, SelectField, SelectFieldGroup, SelectFieldStatus, SelectFieldStatusReport, SelectFieldTag, Sidebar, SortFilter, Switch, SwitchSelect, TabProject, TabSelectionButton, TextAreaInput, TextInput, TopNavBar, messageError, messageInfo, messageLoading, messageSuccess, messageWarning, setMessageApi };
package/dist/index.js CHANGED
@@ -377,7 +377,9 @@ __export(index_exports, {
377
377
  Loader: () => Loader,
378
378
  MenuNavBar: () => MenuNavBar,
379
379
  PrimaryButton: () => PrimaryButton,
380
+ ProfileSelect: () => ProfileSelect,
380
381
  ProgressBar: () => ProgressBar,
382
+ QRCodeGenerator: () => QRCodeGenerator,
381
383
  Radio: () => Radio,
382
384
  RadioGroup: () => RadioGroup,
383
385
  SecondaryButton: () => SecondaryButton,
@@ -391,6 +393,7 @@ __export(index_exports, {
391
393
  SortFilter: () => SortFilter,
392
394
  Switch: () => Switch,
393
395
  SwitchSelect: () => SwitchSelect,
396
+ TabProject: () => TabProject,
394
397
  TabSelectionButton: () => TabSelectionButton,
395
398
  TextAreaInput: () => TextAreaInput,
396
399
  TextInput: () => TextInput,
@@ -3962,6 +3965,406 @@ var FilterPopUp = (filter) => {
3962
3965
  ] }) : void 0
3963
3966
  ] });
3964
3967
  };
3968
+
3969
+ // src/ProfileSelect/ProfileSelect/ProfileSelect.tsx
3970
+ var import_react19 = require("react");
3971
+ var import_icons_react14 = require("@tabler/icons-react");
3972
+ var import_antd21 = require("antd");
3973
+ var import_jsx_runtime42 = require("react/jsx-runtime");
3974
+ function ProfileSelect({
3975
+ allUser,
3976
+ assignUser,
3977
+ mode,
3978
+ onUpdateAssignUser
3979
+ }) {
3980
+ const [maxVisible, setMaxVisible] = (0, import_react19.useState)(4);
3981
+ const [userNotAssign, setUserNotAssign] = (0, import_react19.useState)([]);
3982
+ const [search, setSearch] = (0, import_react19.useState)("");
3983
+ const [isShowSelect, setIsShowSelect] = (0, import_react19.useState)(false);
3984
+ const containerRef = (0, import_react19.useRef)(null);
3985
+ const selectRef = (0, import_react19.useRef)(null);
3986
+ const avatarSize = 30;
3987
+ const spacing = 8;
3988
+ (0, import_react19.useEffect)(() => {
3989
+ const handler = (e) => {
3990
+ if (!selectRef?.current?.contains(e.target) && !containerRef?.current?.contains(e.target)) {
3991
+ setIsShowSelect(false);
3992
+ }
3993
+ };
3994
+ document.addEventListener("mousedown", handler);
3995
+ return () => {
3996
+ document.removeEventListener("mousedown", handler);
3997
+ };
3998
+ }, []);
3999
+ (0, import_react19.useEffect)(() => {
4000
+ if (!containerRef.current) return;
4001
+ const updateWidth = () => {
4002
+ if (containerRef.current) {
4003
+ const rect = containerRef.current.getBoundingClientRect();
4004
+ const count = Math.floor(rect.width / (avatarSize + spacing));
4005
+ setMaxVisible(Math.max(1, count));
4006
+ }
4007
+ };
4008
+ const resizeObserver = new ResizeObserver(updateWidth);
4009
+ resizeObserver.observe(containerRef.current);
4010
+ updateWidth();
4011
+ return () => {
4012
+ resizeObserver.disconnect();
4013
+ };
4014
+ }, [allUser]);
4015
+ (0, import_react19.useEffect)(() => {
4016
+ setUserNotAssign(
4017
+ allUser.filter((u) => !assignUser.some((au) => au.id === u.id))
4018
+ );
4019
+ }, [allUser, assignUser]);
4020
+ const showPlus = assignUser.length > maxVisible;
4021
+ const visibleUsers = showPlus ? assignUser.slice(0, maxVisible - 1) : assignUser;
4022
+ const extraCount = assignUser.length - (maxVisible - 1);
4023
+ const normalizedSearch = search.trim().toLowerCase();
4024
+ const filteredAssigned = normalizedSearch ? assignUser.filter(
4025
+ (u) => u.name.toLowerCase().includes(normalizedSearch)
4026
+ ) : assignUser;
4027
+ const filteredUnassigned = normalizedSearch ? userNotAssign.filter(
4028
+ (u) => u.name.toLowerCase().includes(normalizedSearch)
4029
+ ) : userNotAssign;
4030
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { ref: containerRef, className: "relative body-1", children: [
4031
+ mode === "icon" ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("button", { children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4032
+ import_icons_react14.IconUsers,
4033
+ {
4034
+ size: 40,
4035
+ className: "p-2 border rounded cursor-pointer",
4036
+ onClick: () => setIsShowSelect(!isShowSelect)
4037
+ }
4038
+ ) }) : mode === "showAssign" ? /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
4039
+ "button",
4040
+ {
4041
+ className: "w-full h-[40px] flex -space-x-2 p-2 border-1 rounded-sm",
4042
+ onClick: () => setIsShowSelect(!isShowSelect),
4043
+ children: [
4044
+ visibleUsers.map((user) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "flex items-center cursor-point", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("label", { className: "relative group cursor-pointer", children: [
4045
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4046
+ "img",
4047
+ {
4048
+ src: user.profile,
4049
+ alt: user.name,
4050
+ style: {
4051
+ width: avatarSize,
4052
+ height: avatarSize,
4053
+ borderRadius: "50%"
4054
+ },
4055
+ className: "border border-white group-hover:border-2 group-hover:border-red-500 transition"
4056
+ }
4057
+ ),
4058
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4059
+ "span",
4060
+ {
4061
+ className: "absolute top-0 right-0 -translate-y-2 translate-x-2 \r\n rounded-full bg-white opacity-0 group-hover:opacity-100 \r\n border-2 border-red-500 flex items-center justify-center transition",
4062
+ onClick: () => onUpdateAssignUser(user, "remove"),
4063
+ children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_icons_react14.IconX, { className: "w-4 h-4 text-red-500" })
4064
+ }
4065
+ )
4066
+ ] }) }, user.id)),
4067
+ showPlus && /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
4068
+ "div",
4069
+ {
4070
+ className: "border border-white flex items-center justify-center bg-gray-300 text-black text-sm",
4071
+ style: {
4072
+ width: avatarSize,
4073
+ height: avatarSize,
4074
+ borderRadius: "50%"
4075
+ },
4076
+ children: [
4077
+ "+",
4078
+ extraCount
4079
+ ]
4080
+ }
4081
+ )
4082
+ ]
4083
+ }
4084
+ ) : /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: "w-full h-[40px] flex -space-x-2 p-2 border-1 rounded-sm", children: [
4085
+ visibleUsers.map((user) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "flex items-center ", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("label", { className: "relative group ", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4086
+ "img",
4087
+ {
4088
+ src: user.profile,
4089
+ alt: user.name,
4090
+ style: {
4091
+ width: avatarSize,
4092
+ height: avatarSize,
4093
+ borderRadius: "50%"
4094
+ },
4095
+ className: "border border-white transition"
4096
+ }
4097
+ ) }) }, user.id)),
4098
+ showPlus && /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
4099
+ "div",
4100
+ {
4101
+ className: "border border-white flex items-center justify-center bg-gray-300 text-black text-sm",
4102
+ style: {
4103
+ width: avatarSize,
4104
+ height: avatarSize,
4105
+ borderRadius: "50%"
4106
+ },
4107
+ children: [
4108
+ "+",
4109
+ extraCount
4110
+ ]
4111
+ }
4112
+ )
4113
+ ] }),
4114
+ isShowSelect ? /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
4115
+ "div",
4116
+ {
4117
+ className: "absolute top-12 min-w-[261px] max-w-[400px] w-full h-[314px] p-2 text-xs border-1 rounded-sm ",
4118
+ ref: selectRef,
4119
+ children: [
4120
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: "flex border-1 rounded-md p-2 gap-2 items-center", children: [
4121
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_icons_react14.IconSearch, {}),
4122
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4123
+ import_antd21.Input,
4124
+ {
4125
+ variant: "borderless",
4126
+ placeholder: "\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E0A\u0E37\u0E48\u0E2D",
4127
+ className: "body-3",
4128
+ value: search,
4129
+ onChange: (e) => setSearch(e.target.value)
4130
+ }
4131
+ )
4132
+ ] }),
4133
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: "overflow-y-auto h-[250px] pt-2 px-4 body-3", children: [
4134
+ filteredAssigned.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment, { children: [
4135
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { children: "\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01\u0E17\u0E35\u0E48\u0E40\u0E25\u0E37\u0E2D\u0E01" }),
4136
+ filteredAssigned.map((user) => /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
4137
+ "button",
4138
+ {
4139
+ className: "flex items-center group my-1 w-full p-1 rounded hover:bg-gray-100",
4140
+ onClick: () => onUpdateAssignUser(user, "remove"),
4141
+ children: [
4142
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("label", { className: "relative cursor-pointer", children: [
4143
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4144
+ "img",
4145
+ {
4146
+ src: user.profile,
4147
+ alt: user.name,
4148
+ style: {
4149
+ width: avatarSize,
4150
+ height: avatarSize,
4151
+ borderRadius: "50%"
4152
+ },
4153
+ className: "border-2 border-red-500"
4154
+ }
4155
+ ),
4156
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4157
+ "span",
4158
+ {
4159
+ className: "absolute top-0 right-0 -translate-y-2 translate-x-2 \r\n rounded-full bg-white opacity-0 group-hover:opacity-100 \r\n border-2 border-red-500 flex items-center justify-center transition",
4160
+ onClick: () => onUpdateAssignUser(user, "remove"),
4161
+ children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_icons_react14.IconX, { className: "text-red-500", size: 15 })
4162
+ }
4163
+ )
4164
+ ] }),
4165
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "ml-2", children: user.name })
4166
+ ]
4167
+ },
4168
+ user.id
4169
+ ))
4170
+ ] }),
4171
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { children: "\u0E1C\u0E39\u0E49\u0E04\u0E19 " }),
4172
+ filteredUnassigned.map((user) => /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
4173
+ "button",
4174
+ {
4175
+ className: "flex items-center my-1 hover:bg-gray-100 w-full p-1 rounded",
4176
+ onClick: () => onUpdateAssignUser(user),
4177
+ children: [
4178
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4179
+ "img",
4180
+ {
4181
+ src: user.profile,
4182
+ alt: user.name,
4183
+ style: {
4184
+ width: avatarSize,
4185
+ height: avatarSize,
4186
+ borderRadius: "50%"
4187
+ },
4188
+ className: "border "
4189
+ }
4190
+ ),
4191
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "ml-2", children: user.name })
4192
+ ]
4193
+ },
4194
+ user.id
4195
+ ))
4196
+ ] })
4197
+ ]
4198
+ }
4199
+ ) : null
4200
+ ] });
4201
+ }
4202
+
4203
+ // src/Button/QRCode/QRCode.tsx
4204
+ var import_react20 = require("react");
4205
+ var import_qrcode = __toESM(require("qrcode"));
4206
+ var import_jsx_runtime43 = require("react/jsx-runtime");
4207
+ var QRCodeGenerator = ({
4208
+ url,
4209
+ previewSize = 200,
4210
+ defaultExportSize = 512,
4211
+ fileBaseName = "qr-code"
4212
+ }) => {
4213
+ const canvasRef = (0, import_react20.useRef)(null);
4214
+ const [format3, setFormat] = (0, import_react20.useState)("png");
4215
+ const [exportSize, setExportSize] = (0, import_react20.useState)(defaultExportSize);
4216
+ const sizeOption = [
4217
+ {
4218
+ label: "64 x 64",
4219
+ value: "64"
4220
+ },
4221
+ {
4222
+ label: "128 x 128",
4223
+ value: "128"
4224
+ },
4225
+ {
4226
+ label: "256 x 256",
4227
+ value: "256"
4228
+ },
4229
+ {
4230
+ label: "512 x 512",
4231
+ value: "512"
4232
+ },
4233
+ {
4234
+ label: "1024 x 1024",
4235
+ value: "1024"
4236
+ },
4237
+ {
4238
+ label: "2048 x 2048",
4239
+ value: "2048"
4240
+ },
4241
+ {
4242
+ label: "4096 x 4096",
4243
+ value: "4096"
4244
+ }
4245
+ ];
4246
+ const typeOption = [
4247
+ {
4248
+ label: "PNG",
4249
+ value: "png"
4250
+ },
4251
+ {
4252
+ label: "SVG",
4253
+ value: "svg"
4254
+ },
4255
+ {
4256
+ label: "JPEG",
4257
+ value: "jpeg"
4258
+ }
4259
+ ];
4260
+ (0, import_react20.useEffect)(() => {
4261
+ if (!canvasRef.current) return;
4262
+ import_qrcode.default.toCanvas(canvasRef.current, url, { width: previewSize, margin: 1 }, (error) => {
4263
+ if (error) console.error(error);
4264
+ });
4265
+ }, [url, previewSize]);
4266
+ const download = async () => {
4267
+ try {
4268
+ if (format3 === "svg") {
4269
+ const svgString = await import_qrcode.default.toString(url, {
4270
+ type: "svg",
4271
+ width: exportSize,
4272
+ margin: 1
4273
+ });
4274
+ const blob = new Blob([svgString], { type: "image/svg+xml" });
4275
+ const objUrl = URL.createObjectURL(blob);
4276
+ triggerDownload(objUrl, `${fileBaseName}.svg`);
4277
+ URL.revokeObjectURL(objUrl);
4278
+ } else {
4279
+ const offscreen = document.createElement("canvas");
4280
+ await import_qrcode.default.toCanvas(offscreen, url, {
4281
+ width: exportSize,
4282
+ margin: 1
4283
+ });
4284
+ const mime = format3 === "png" ? "image/png" : "image/jpeg";
4285
+ const dataURL = format3 === "jpeg" ? offscreen.toDataURL(mime, 0.92) : offscreen.toDataURL(mime);
4286
+ triggerDownload(dataURL, `${fileBaseName}.${format3}`);
4287
+ }
4288
+ } catch (err) {
4289
+ console.error("Failed to generate QR export:", err);
4290
+ alert("Sorry, something went wrong creating the download.");
4291
+ }
4292
+ };
4293
+ const triggerDownload = (href, filename) => {
4294
+ const a = document.createElement("a");
4295
+ a.href = href;
4296
+ a.download = filename;
4297
+ document.body.appendChild(a);
4298
+ a.click();
4299
+ a.remove();
4300
+ };
4301
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { style: { display: "inline-flex", flexDirection: "column", gap: 8 }, className: "justify-center items-center", children: [
4302
+ url === "" ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: "border-1 p-2 mb-2", style: { width: `${previewSize}px`, height: `${previewSize}px` } }) : /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("canvas", { ref: canvasRef, className: "border-1 p-2 mb-2" }),
4303
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
4304
+ "div",
4305
+ {
4306
+ style: {
4307
+ display: "flex",
4308
+ gap: 8,
4309
+ alignItems: "center",
4310
+ flexWrap: "wrap"
4311
+ },
4312
+ className: "flex-col",
4313
+ children: [
4314
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "flex gap-2 mx-2", children: [
4315
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("label", { className: "border-1 p-2 rounded-md flex flex-col w-1/2 text-sm text-gray-400", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4316
+ SelectField,
4317
+ {
4318
+ label: "\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A",
4319
+ value: format3,
4320
+ onChange: (e) => setFormat(e.target.value),
4321
+ options: typeOption
4322
+ }
4323
+ ) }),
4324
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("label", { className: "border-1 p-2 rounded-md flex flex-col w-1/2 text-sm text-gray-400", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4325
+ SelectField,
4326
+ {
4327
+ label: "\u0E02\u0E19\u0E32\u0E14 (px)",
4328
+ value: exportSize,
4329
+ onChange: (e) => setExportSize(Number(e.target.value)),
4330
+ options: sizeOption
4331
+ }
4332
+ ) })
4333
+ ] }),
4334
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(PrimaryButton, { onClick: download, disabled: url === "", textColor: "white", title: "\u0E14\u0E32\u0E27\u0E42\u0E2B\u0E25\u0E14\u0E23\u0E2B\u0E31\u0E2A QR" })
4335
+ ]
4336
+ }
4337
+ )
4338
+ ] });
4339
+ };
4340
+
4341
+ // src/TabPropject/Tabproject/TabProject.tsx
4342
+ var import_antd22 = require("antd");
4343
+ var import_jsx_runtime44 = require("react/jsx-runtime");
4344
+ function TabProject({ tabOption, now, onChange }) {
4345
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
4346
+ import_antd22.Tabs,
4347
+ {
4348
+ activeKey: now,
4349
+ items: tabOption.map((item, i) => {
4350
+ return {
4351
+ key: item.key,
4352
+ label: /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
4353
+ "button",
4354
+ {
4355
+ className: "tab-label flex gap-2 items-center body-1",
4356
+ onClick: () => onChange(item.key),
4357
+ children: [
4358
+ item.icon,
4359
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { children: item.label })
4360
+ ]
4361
+ }
4362
+ )
4363
+ };
4364
+ })
4365
+ }
4366
+ );
4367
+ }
3965
4368
  // Annotate the CommonJS export names for ESM import in node:
3966
4369
  0 && (module.exports = {
3967
4370
  AntDModal,
@@ -3986,7 +4389,9 @@ var FilterPopUp = (filter) => {
3986
4389
  Loader,
3987
4390
  MenuNavBar,
3988
4391
  PrimaryButton,
4392
+ ProfileSelect,
3989
4393
  ProgressBar,
4394
+ QRCodeGenerator,
3990
4395
  Radio,
3991
4396
  RadioGroup,
3992
4397
  SecondaryButton,
@@ -4000,6 +4405,7 @@ var FilterPopUp = (filter) => {
4000
4405
  SortFilter,
4001
4406
  Switch,
4002
4407
  SwitchSelect,
4408
+ TabProject,
4003
4409
  TabSelectionButton,
4004
4410
  TextAreaInput,
4005
4411
  TextInput,
package/dist/index.mjs CHANGED
@@ -3904,6 +3904,406 @@ var FilterPopUp = (filter) => {
3904
3904
  ] }) : void 0
3905
3905
  ] });
3906
3906
  };
3907
+
3908
+ // src/ProfileSelect/ProfileSelect/ProfileSelect.tsx
3909
+ import { useEffect as useEffect7, useRef as useRef6, useState as useState17 } from "react";
3910
+ import { IconSearch, IconUsers, IconX as IconX4 } from "@tabler/icons-react";
3911
+ import { Input as Input5 } from "antd";
3912
+ import { Fragment as Fragment8, jsx as jsx42, jsxs as jsxs36 } from "react/jsx-runtime";
3913
+ function ProfileSelect({
3914
+ allUser,
3915
+ assignUser,
3916
+ mode,
3917
+ onUpdateAssignUser
3918
+ }) {
3919
+ const [maxVisible, setMaxVisible] = useState17(4);
3920
+ const [userNotAssign, setUserNotAssign] = useState17([]);
3921
+ const [search, setSearch] = useState17("");
3922
+ const [isShowSelect, setIsShowSelect] = useState17(false);
3923
+ const containerRef = useRef6(null);
3924
+ const selectRef = useRef6(null);
3925
+ const avatarSize = 30;
3926
+ const spacing = 8;
3927
+ useEffect7(() => {
3928
+ const handler = (e) => {
3929
+ if (!selectRef?.current?.contains(e.target) && !containerRef?.current?.contains(e.target)) {
3930
+ setIsShowSelect(false);
3931
+ }
3932
+ };
3933
+ document.addEventListener("mousedown", handler);
3934
+ return () => {
3935
+ document.removeEventListener("mousedown", handler);
3936
+ };
3937
+ }, []);
3938
+ useEffect7(() => {
3939
+ if (!containerRef.current) return;
3940
+ const updateWidth = () => {
3941
+ if (containerRef.current) {
3942
+ const rect = containerRef.current.getBoundingClientRect();
3943
+ const count = Math.floor(rect.width / (avatarSize + spacing));
3944
+ setMaxVisible(Math.max(1, count));
3945
+ }
3946
+ };
3947
+ const resizeObserver = new ResizeObserver(updateWidth);
3948
+ resizeObserver.observe(containerRef.current);
3949
+ updateWidth();
3950
+ return () => {
3951
+ resizeObserver.disconnect();
3952
+ };
3953
+ }, [allUser]);
3954
+ useEffect7(() => {
3955
+ setUserNotAssign(
3956
+ allUser.filter((u) => !assignUser.some((au) => au.id === u.id))
3957
+ );
3958
+ }, [allUser, assignUser]);
3959
+ const showPlus = assignUser.length > maxVisible;
3960
+ const visibleUsers = showPlus ? assignUser.slice(0, maxVisible - 1) : assignUser;
3961
+ const extraCount = assignUser.length - (maxVisible - 1);
3962
+ const normalizedSearch = search.trim().toLowerCase();
3963
+ const filteredAssigned = normalizedSearch ? assignUser.filter(
3964
+ (u) => u.name.toLowerCase().includes(normalizedSearch)
3965
+ ) : assignUser;
3966
+ const filteredUnassigned = normalizedSearch ? userNotAssign.filter(
3967
+ (u) => u.name.toLowerCase().includes(normalizedSearch)
3968
+ ) : userNotAssign;
3969
+ return /* @__PURE__ */ jsxs36("div", { ref: containerRef, className: "relative body-1", children: [
3970
+ mode === "icon" ? /* @__PURE__ */ jsx42("button", { children: /* @__PURE__ */ jsx42(
3971
+ IconUsers,
3972
+ {
3973
+ size: 40,
3974
+ className: "p-2 border rounded cursor-pointer",
3975
+ onClick: () => setIsShowSelect(!isShowSelect)
3976
+ }
3977
+ ) }) : mode === "showAssign" ? /* @__PURE__ */ jsxs36(
3978
+ "button",
3979
+ {
3980
+ className: "w-full h-[40px] flex -space-x-2 p-2 border-1 rounded-sm",
3981
+ onClick: () => setIsShowSelect(!isShowSelect),
3982
+ children: [
3983
+ visibleUsers.map((user) => /* @__PURE__ */ jsx42("div", { className: "flex items-center cursor-point", children: /* @__PURE__ */ jsxs36("label", { className: "relative group cursor-pointer", children: [
3984
+ /* @__PURE__ */ jsx42(
3985
+ "img",
3986
+ {
3987
+ src: user.profile,
3988
+ alt: user.name,
3989
+ style: {
3990
+ width: avatarSize,
3991
+ height: avatarSize,
3992
+ borderRadius: "50%"
3993
+ },
3994
+ className: "border border-white group-hover:border-2 group-hover:border-red-500 transition"
3995
+ }
3996
+ ),
3997
+ /* @__PURE__ */ jsx42(
3998
+ "span",
3999
+ {
4000
+ className: "absolute top-0 right-0 -translate-y-2 translate-x-2 \r\n rounded-full bg-white opacity-0 group-hover:opacity-100 \r\n border-2 border-red-500 flex items-center justify-center transition",
4001
+ onClick: () => onUpdateAssignUser(user, "remove"),
4002
+ children: /* @__PURE__ */ jsx42(IconX4, { className: "w-4 h-4 text-red-500" })
4003
+ }
4004
+ )
4005
+ ] }) }, user.id)),
4006
+ showPlus && /* @__PURE__ */ jsxs36(
4007
+ "div",
4008
+ {
4009
+ className: "border border-white flex items-center justify-center bg-gray-300 text-black text-sm",
4010
+ style: {
4011
+ width: avatarSize,
4012
+ height: avatarSize,
4013
+ borderRadius: "50%"
4014
+ },
4015
+ children: [
4016
+ "+",
4017
+ extraCount
4018
+ ]
4019
+ }
4020
+ )
4021
+ ]
4022
+ }
4023
+ ) : /* @__PURE__ */ jsxs36("div", { className: "w-full h-[40px] flex -space-x-2 p-2 border-1 rounded-sm", children: [
4024
+ visibleUsers.map((user) => /* @__PURE__ */ jsx42("div", { className: "flex items-center ", children: /* @__PURE__ */ jsx42("label", { className: "relative group ", children: /* @__PURE__ */ jsx42(
4025
+ "img",
4026
+ {
4027
+ src: user.profile,
4028
+ alt: user.name,
4029
+ style: {
4030
+ width: avatarSize,
4031
+ height: avatarSize,
4032
+ borderRadius: "50%"
4033
+ },
4034
+ className: "border border-white transition"
4035
+ }
4036
+ ) }) }, user.id)),
4037
+ showPlus && /* @__PURE__ */ jsxs36(
4038
+ "div",
4039
+ {
4040
+ className: "border border-white flex items-center justify-center bg-gray-300 text-black text-sm",
4041
+ style: {
4042
+ width: avatarSize,
4043
+ height: avatarSize,
4044
+ borderRadius: "50%"
4045
+ },
4046
+ children: [
4047
+ "+",
4048
+ extraCount
4049
+ ]
4050
+ }
4051
+ )
4052
+ ] }),
4053
+ isShowSelect ? /* @__PURE__ */ jsxs36(
4054
+ "div",
4055
+ {
4056
+ className: "absolute top-12 min-w-[261px] max-w-[400px] w-full h-[314px] p-2 text-xs border-1 rounded-sm ",
4057
+ ref: selectRef,
4058
+ children: [
4059
+ /* @__PURE__ */ jsxs36("div", { className: "flex border-1 rounded-md p-2 gap-2 items-center", children: [
4060
+ /* @__PURE__ */ jsx42(IconSearch, {}),
4061
+ /* @__PURE__ */ jsx42(
4062
+ Input5,
4063
+ {
4064
+ variant: "borderless",
4065
+ placeholder: "\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E0A\u0E37\u0E48\u0E2D",
4066
+ className: "body-3",
4067
+ value: search,
4068
+ onChange: (e) => setSearch(e.target.value)
4069
+ }
4070
+ )
4071
+ ] }),
4072
+ /* @__PURE__ */ jsxs36("div", { className: "overflow-y-auto h-[250px] pt-2 px-4 body-3", children: [
4073
+ filteredAssigned.length > 0 && /* @__PURE__ */ jsxs36(Fragment8, { children: [
4074
+ /* @__PURE__ */ jsx42("div", { children: "\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01\u0E17\u0E35\u0E48\u0E40\u0E25\u0E37\u0E2D\u0E01" }),
4075
+ filteredAssigned.map((user) => /* @__PURE__ */ jsxs36(
4076
+ "button",
4077
+ {
4078
+ className: "flex items-center group my-1 w-full p-1 rounded hover:bg-gray-100",
4079
+ onClick: () => onUpdateAssignUser(user, "remove"),
4080
+ children: [
4081
+ /* @__PURE__ */ jsxs36("label", { className: "relative cursor-pointer", children: [
4082
+ /* @__PURE__ */ jsx42(
4083
+ "img",
4084
+ {
4085
+ src: user.profile,
4086
+ alt: user.name,
4087
+ style: {
4088
+ width: avatarSize,
4089
+ height: avatarSize,
4090
+ borderRadius: "50%"
4091
+ },
4092
+ className: "border-2 border-red-500"
4093
+ }
4094
+ ),
4095
+ /* @__PURE__ */ jsx42(
4096
+ "span",
4097
+ {
4098
+ className: "absolute top-0 right-0 -translate-y-2 translate-x-2 \r\n rounded-full bg-white opacity-0 group-hover:opacity-100 \r\n border-2 border-red-500 flex items-center justify-center transition",
4099
+ onClick: () => onUpdateAssignUser(user, "remove"),
4100
+ children: /* @__PURE__ */ jsx42(IconX4, { className: "text-red-500", size: 15 })
4101
+ }
4102
+ )
4103
+ ] }),
4104
+ /* @__PURE__ */ jsx42("span", { className: "ml-2", children: user.name })
4105
+ ]
4106
+ },
4107
+ user.id
4108
+ ))
4109
+ ] }),
4110
+ /* @__PURE__ */ jsx42("div", { children: "\u0E1C\u0E39\u0E49\u0E04\u0E19 " }),
4111
+ filteredUnassigned.map((user) => /* @__PURE__ */ jsxs36(
4112
+ "button",
4113
+ {
4114
+ className: "flex items-center my-1 hover:bg-gray-100 w-full p-1 rounded",
4115
+ onClick: () => onUpdateAssignUser(user),
4116
+ children: [
4117
+ /* @__PURE__ */ jsx42(
4118
+ "img",
4119
+ {
4120
+ src: user.profile,
4121
+ alt: user.name,
4122
+ style: {
4123
+ width: avatarSize,
4124
+ height: avatarSize,
4125
+ borderRadius: "50%"
4126
+ },
4127
+ className: "border "
4128
+ }
4129
+ ),
4130
+ /* @__PURE__ */ jsx42("span", { className: "ml-2", children: user.name })
4131
+ ]
4132
+ },
4133
+ user.id
4134
+ ))
4135
+ ] })
4136
+ ]
4137
+ }
4138
+ ) : null
4139
+ ] });
4140
+ }
4141
+
4142
+ // src/Button/QRCode/QRCode.tsx
4143
+ import { useEffect as useEffect8, useRef as useRef7, useState as useState18 } from "react";
4144
+ import QRCode from "qrcode";
4145
+ import { jsx as jsx43, jsxs as jsxs37 } from "react/jsx-runtime";
4146
+ var QRCodeGenerator = ({
4147
+ url,
4148
+ previewSize = 200,
4149
+ defaultExportSize = 512,
4150
+ fileBaseName = "qr-code"
4151
+ }) => {
4152
+ const canvasRef = useRef7(null);
4153
+ const [format3, setFormat] = useState18("png");
4154
+ const [exportSize, setExportSize] = useState18(defaultExportSize);
4155
+ const sizeOption = [
4156
+ {
4157
+ label: "64 x 64",
4158
+ value: "64"
4159
+ },
4160
+ {
4161
+ label: "128 x 128",
4162
+ value: "128"
4163
+ },
4164
+ {
4165
+ label: "256 x 256",
4166
+ value: "256"
4167
+ },
4168
+ {
4169
+ label: "512 x 512",
4170
+ value: "512"
4171
+ },
4172
+ {
4173
+ label: "1024 x 1024",
4174
+ value: "1024"
4175
+ },
4176
+ {
4177
+ label: "2048 x 2048",
4178
+ value: "2048"
4179
+ },
4180
+ {
4181
+ label: "4096 x 4096",
4182
+ value: "4096"
4183
+ }
4184
+ ];
4185
+ const typeOption = [
4186
+ {
4187
+ label: "PNG",
4188
+ value: "png"
4189
+ },
4190
+ {
4191
+ label: "SVG",
4192
+ value: "svg"
4193
+ },
4194
+ {
4195
+ label: "JPEG",
4196
+ value: "jpeg"
4197
+ }
4198
+ ];
4199
+ useEffect8(() => {
4200
+ if (!canvasRef.current) return;
4201
+ QRCode.toCanvas(canvasRef.current, url, { width: previewSize, margin: 1 }, (error) => {
4202
+ if (error) console.error(error);
4203
+ });
4204
+ }, [url, previewSize]);
4205
+ const download = async () => {
4206
+ try {
4207
+ if (format3 === "svg") {
4208
+ const svgString = await QRCode.toString(url, {
4209
+ type: "svg",
4210
+ width: exportSize,
4211
+ margin: 1
4212
+ });
4213
+ const blob = new Blob([svgString], { type: "image/svg+xml" });
4214
+ const objUrl = URL.createObjectURL(blob);
4215
+ triggerDownload(objUrl, `${fileBaseName}.svg`);
4216
+ URL.revokeObjectURL(objUrl);
4217
+ } else {
4218
+ const offscreen = document.createElement("canvas");
4219
+ await QRCode.toCanvas(offscreen, url, {
4220
+ width: exportSize,
4221
+ margin: 1
4222
+ });
4223
+ const mime = format3 === "png" ? "image/png" : "image/jpeg";
4224
+ const dataURL = format3 === "jpeg" ? offscreen.toDataURL(mime, 0.92) : offscreen.toDataURL(mime);
4225
+ triggerDownload(dataURL, `${fileBaseName}.${format3}`);
4226
+ }
4227
+ } catch (err) {
4228
+ console.error("Failed to generate QR export:", err);
4229
+ alert("Sorry, something went wrong creating the download.");
4230
+ }
4231
+ };
4232
+ const triggerDownload = (href, filename) => {
4233
+ const a = document.createElement("a");
4234
+ a.href = href;
4235
+ a.download = filename;
4236
+ document.body.appendChild(a);
4237
+ a.click();
4238
+ a.remove();
4239
+ };
4240
+ return /* @__PURE__ */ jsxs37("div", { style: { display: "inline-flex", flexDirection: "column", gap: 8 }, className: "justify-center items-center", children: [
4241
+ url === "" ? /* @__PURE__ */ jsx43("div", { className: "border-1 p-2 mb-2", style: { width: `${previewSize}px`, height: `${previewSize}px` } }) : /* @__PURE__ */ jsx43("canvas", { ref: canvasRef, className: "border-1 p-2 mb-2" }),
4242
+ /* @__PURE__ */ jsxs37(
4243
+ "div",
4244
+ {
4245
+ style: {
4246
+ display: "flex",
4247
+ gap: 8,
4248
+ alignItems: "center",
4249
+ flexWrap: "wrap"
4250
+ },
4251
+ className: "flex-col",
4252
+ children: [
4253
+ /* @__PURE__ */ jsxs37("div", { className: "flex gap-2 mx-2", children: [
4254
+ /* @__PURE__ */ jsx43("label", { className: "border-1 p-2 rounded-md flex flex-col w-1/2 text-sm text-gray-400", children: /* @__PURE__ */ jsx43(
4255
+ SelectField,
4256
+ {
4257
+ label: "\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A",
4258
+ value: format3,
4259
+ onChange: (e) => setFormat(e.target.value),
4260
+ options: typeOption
4261
+ }
4262
+ ) }),
4263
+ /* @__PURE__ */ jsx43("label", { className: "border-1 p-2 rounded-md flex flex-col w-1/2 text-sm text-gray-400", children: /* @__PURE__ */ jsx43(
4264
+ SelectField,
4265
+ {
4266
+ label: "\u0E02\u0E19\u0E32\u0E14 (px)",
4267
+ value: exportSize,
4268
+ onChange: (e) => setExportSize(Number(e.target.value)),
4269
+ options: sizeOption
4270
+ }
4271
+ ) })
4272
+ ] }),
4273
+ /* @__PURE__ */ jsx43(PrimaryButton, { onClick: download, disabled: url === "", textColor: "white", title: "\u0E14\u0E32\u0E27\u0E42\u0E2B\u0E25\u0E14\u0E23\u0E2B\u0E31\u0E2A QR" })
4274
+ ]
4275
+ }
4276
+ )
4277
+ ] });
4278
+ };
4279
+
4280
+ // src/TabPropject/Tabproject/TabProject.tsx
4281
+ import { Tabs } from "antd";
4282
+ import { jsx as jsx44, jsxs as jsxs38 } from "react/jsx-runtime";
4283
+ function TabProject({ tabOption, now, onChange }) {
4284
+ return /* @__PURE__ */ jsx44(
4285
+ Tabs,
4286
+ {
4287
+ activeKey: now,
4288
+ items: tabOption.map((item, i) => {
4289
+ return {
4290
+ key: item.key,
4291
+ label: /* @__PURE__ */ jsxs38(
4292
+ "button",
4293
+ {
4294
+ className: "tab-label flex gap-2 items-center body-1",
4295
+ onClick: () => onChange(item.key),
4296
+ children: [
4297
+ item.icon,
4298
+ /* @__PURE__ */ jsx44("span", { children: item.label })
4299
+ ]
4300
+ }
4301
+ )
4302
+ };
4303
+ })
4304
+ }
4305
+ );
4306
+ }
3907
4307
  export {
3908
4308
  AntDModal,
3909
4309
  AntDataTable,
@@ -3927,7 +4327,9 @@ export {
3927
4327
  Loader,
3928
4328
  MenuNavBar,
3929
4329
  PrimaryButton,
4330
+ ProfileSelect,
3930
4331
  ProgressBar,
4332
+ QRCodeGenerator,
3931
4333
  Radio,
3932
4334
  RadioGroup,
3933
4335
  SecondaryButton,
@@ -3941,6 +4343,7 @@ export {
3941
4343
  SortFilter,
3942
4344
  Switch,
3943
4345
  SwitchSelect,
4346
+ TabProject,
3944
4347
  TabSelectionButton,
3945
4348
  TextAreaInput,
3946
4349
  TextInput,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@esic-lab/data-core-ui",
3
- "version": "0.0.45",
3
+ "version": "0.0.46",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.js",
6
6
  "types": "dist/index.d.ts",