@mahatisystems/mahati-ui-components 1.2.1 → 1.3.2

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.mjs CHANGED
@@ -1,4 +1,3 @@
1
- // src/components/Button.tsx
2
1
  function _array_like_to_array(arr, len) {
3
2
  if (len == null || len > arr.length) len = arr.length;
4
3
  for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
@@ -148,6 +147,69 @@ function _unsupported_iterable_to_array(o, minLen) {
148
147
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
149
148
  }
150
149
  var _Chart;
150
+ var __getOwnPropNames = Object.getOwnPropertyNames;
151
+ var __commonJS = function(cb, mod) {
152
+ return function __require() {
153
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = {
154
+ exports: {}
155
+ }).exports, mod), mod.exports;
156
+ };
157
+ };
158
+ // src/assets/icons/check-mark_1.png
159
+ var require_check_mark_1 = __commonJS({
160
+ "src/assets/icons/check-mark_1.png": function(exports, module) {
161
+ module.exports = "./check-mark_1-6GNY6HFY.png";
162
+ }
163
+ });
164
+ // src/assets/icons/check-mark_2.png
165
+ var require_check_mark_2 = __commonJS({
166
+ "src/assets/icons/check-mark_2.png": function(exports, module) {
167
+ module.exports = "./check-mark_2-YWM2KQA2.png";
168
+ }
169
+ });
170
+ // src/assets/icons/danger_1.png
171
+ var require_danger_1 = __commonJS({
172
+ "src/assets/icons/danger_1.png": function(exports, module) {
173
+ module.exports = "./danger_1-LUIFNS2J.png";
174
+ }
175
+ });
176
+ // src/assets/icons/danger_2.png
177
+ var require_danger_2 = __commonJS({
178
+ "src/assets/icons/danger_2.png": function(exports, module) {
179
+ module.exports = "./danger_2-YTNTGWQA.png";
180
+ }
181
+ });
182
+ // src/assets/icons/danger_1_1.png
183
+ var require_danger_1_1 = __commonJS({
184
+ "src/assets/icons/danger_1_1.png": function(exports, module) {
185
+ module.exports = "./danger_1_1-PHLDGYEA.png";
186
+ }
187
+ });
188
+ // src/assets/icons/notification_1.png
189
+ var require_notification_1 = __commonJS({
190
+ "src/assets/icons/notification_1.png": function(exports, module) {
191
+ module.exports = "./notification_1-K2I7DVDH.png";
192
+ }
193
+ });
194
+ // src/assets/icons/notification_2.png
195
+ var require_notification_2 = __commonJS({
196
+ "src/assets/icons/notification_2.png": function(exports, module) {
197
+ module.exports = "./notification_2-KFI6MN7T.png";
198
+ }
199
+ });
200
+ // src/assets/icons/close.png
201
+ var require_close = __commonJS({
202
+ "src/assets/icons/close.png": function(exports, module) {
203
+ module.exports = "./close-EEDOIEDC.png";
204
+ }
205
+ });
206
+ // src/assets/icons/close_copy_1.png
207
+ var require_close_copy_1 = __commonJS({
208
+ "src/assets/icons/close_copy_1.png": function(exports, module) {
209
+ module.exports = "./close_copy_1-PFFNUORV.png";
210
+ }
211
+ });
212
+ // src/components/Button.tsx
151
213
  import React from "react";
152
214
  import { cva } from "class-variance-authority";
153
215
  // src/lib/utils.ts
@@ -2890,8 +2952,318 @@ var Calendar = function(param) {
2890
2952
  })), isOpen && calendarContent);
2891
2953
  };
2892
2954
  Calendar.displayName = "Calendar";
2955
+ // src/components/ToastMessage.tsx
2956
+ import React13, { useEffect as useEffect6, useMemo, useState as useState9 } from "react";
2957
+ var cn5 = function() {
2958
+ for(var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++){
2959
+ values[_key] = arguments[_key];
2960
+ }
2961
+ return values.filter(Boolean).join(" ");
2962
+ };
2963
+ var cnArr = function(values) {
2964
+ return values.filter(Boolean).join(" ");
2965
+ };
2966
+ var assetSrc = function(m) {
2967
+ if (typeof m === "string") return m;
2968
+ var anyM = m;
2969
+ if (typeof (anyM === null || anyM === void 0 ? void 0 : anyM.src) === "string") return anyM.src;
2970
+ var d = anyM === null || anyM === void 0 ? void 0 : anyM.default;
2971
+ if (typeof d === "string") return d;
2972
+ if (typeof (d === null || d === void 0 ? void 0 : d.src) === "string") return d.src;
2973
+ return "";
2974
+ };
2975
+ var checkMarkSolid = require_check_mark_1();
2976
+ var checkMarkTransparent = require_check_mark_2();
2977
+ var dangerSolid = require_danger_1();
2978
+ var dangerTransparent = require_danger_2();
2979
+ var warningTransparent = require_danger_1_1();
2980
+ var notificationSolid = require_notification_1();
2981
+ var notificationTransparent = require_notification_2();
2982
+ var closeSolid = require_close();
2983
+ var closeTransparent = require_close_copy_1();
2984
+ var presetFor = function(type) {
2985
+ var commonContainer = "w-[min(92vw,420px)] md:w-[325px] rounded-[12px] shadow-[0_4px_12px_0_rgba(0,0,0,0.08)]";
2986
+ switch(type){
2987
+ case "Success":
2988
+ return {
2989
+ container: "".concat(commonContainer, " h-[70px]"),
2990
+ bgSolid: "bg-[linear-gradient(90deg,rgba(40,167,69,1)_0%,rgba(58,208,125,1)_100%)]",
2991
+ stripBg: "bg-[linear-gradient(90deg,rgba(40,167,69,1)_22.5%,rgba(58,208,125,1)_130%)]",
2992
+ stripTitleColor: "text-[rgba(40,167,69,1)]"
2993
+ };
2994
+ case "Error":
2995
+ return {
2996
+ container: "".concat(commonContainer, " h-[70px]"),
2997
+ bgSolid: "bg-[linear-gradient(90deg,rgba(220,53,69,1)_0%,rgba(183,28,28,1)_100%)]",
2998
+ stripBg: "bg-[linear-gradient(90deg,rgba(220,53,69,1)_22.5%,rgba(183,28,28,1)_130%)]",
2999
+ stripTitleColor: "text-[rgba(220,53,69,1)]"
3000
+ };
3001
+ case "Warning":
3002
+ return {
3003
+ container: "".concat(commonContainer, " h-[70px]"),
3004
+ bgSolid: "bg-[linear-gradient(90deg,rgba(245,158,11,1)_0%,rgba(255,191,92,1)_100%)]",
3005
+ stripBg: "bg-[linear-gradient(90deg,rgba(245,158,11,1)_22.5%,rgba(255,191,92,1)_130%)]",
3006
+ stripTitleColor: "text-[rgba(245,158,11,1)]"
3007
+ };
3008
+ case "Notification":
3009
+ return {
3010
+ container: "".concat(commonContainer, " h-[70px]"),
3011
+ bgSolid: "bg-[linear-gradient(90deg,rgba(23,97,163,1)_0%,rgba(77,175,131,1)_100%)]",
3012
+ stripBg: "bg-[linear-gradient(90deg,rgba(23,97,163,1)_22.5%,rgba(77,175,131,1)_130%)]",
3013
+ stripTitleColor: "text-[rgba(23,97,163,1)]"
3014
+ };
3015
+ case "LiquidUI":
3016
+ return {
3017
+ container: "".concat(commonContainer, " h-[70px]"),
3018
+ bgSolid: "bg-[linear-gradient(90deg,rgba(16,185,129,1)_0%,rgba(59,130,246,1)_100%)]",
3019
+ stripBg: "bg-[linear-gradient(90deg,rgba(16,185,129,1)_22.5%,rgba(59,130,246,1)_130%)]",
3020
+ stripTitleColor: "text-[rgba(16,185,129,1)]"
3021
+ };
3022
+ case "Action":
3023
+ return {
3024
+ container: "".concat(commonContainer, " h-[110px]"),
3025
+ bgSolid: "bg-[linear-gradient(90deg,rgba(139,92,246,1)_0%,rgba(168,85,247,1)_100%)]",
3026
+ stripBg: "bg-[linear-gradient(90deg,rgba(139,92,246,1)_22.5%,rgba(168,85,247,1)_130%)]",
3027
+ stripTitleColor: "text-[rgba(139,92,246,1)]"
3028
+ };
3029
+ default:
3030
+ return {
3031
+ container: "".concat(commonContainer, " h-[70px]"),
3032
+ bgSolid: "bg-[linear-gradient(90deg,rgba(245,158,11,1)_0%,rgba(255,191,92,1)_100%)]",
3033
+ stripBg: "bg-[linear-gradient(90deg,rgba(245,158,11,1)_22.5%,rgba(255,191,92,1)_130%)]",
3034
+ stripTitleColor: "text-[rgba(245,158,11,1)]"
3035
+ };
3036
+ }
3037
+ };
3038
+ var titleForType = function(type) {
3039
+ switch(type){
3040
+ case "LiquidUI":
3041
+ return "Liquid UI";
3042
+ case "Action":
3043
+ return "Confirmation";
3044
+ default:
3045
+ return type;
3046
+ }
3047
+ };
3048
+ var iconFor = function(type, background) {
3049
+ var solid = background === "solid";
3050
+ switch(type){
3051
+ case "Success":
3052
+ return assetSrc(solid ? checkMarkSolid : checkMarkTransparent);
3053
+ case "Error":
3054
+ return assetSrc(solid ? dangerSolid : dangerTransparent);
3055
+ case "Warning":
3056
+ return assetSrc(solid ? dangerSolid : warningTransparent);
3057
+ case "Notification":
3058
+ return assetSrc(solid ? notificationSolid : notificationTransparent);
3059
+ case "LiquidUI":
3060
+ return assetSrc(checkMarkSolid);
3061
+ case "Action":
3062
+ return assetSrc(checkMarkSolid);
3063
+ default:
3064
+ return assetSrc(checkMarkSolid);
3065
+ }
3066
+ };
3067
+ var closeIconFor = function(background) {
3068
+ return assetSrc(background === "solid" ? closeSolid : closeTransparent);
3069
+ };
3070
+ var ToastItem = function(param) {
3071
+ var toast = param.toast, onClose = param.onClose;
3072
+ var _toast_actions, _toast_actions1;
3073
+ var _useState9 = _sliced_to_array(useState9(false), 2), isExiting = _useState9[0], setIsExiting = _useState9[1];
3074
+ var _useState91 = _sliced_to_array(useState9(false), 2), hovered = _useState91[0], setHovered = _useState91[1];
3075
+ var hasActions = !!(toast.actions && toast.actions.length > 0);
3076
+ var preset = useMemo(function() {
3077
+ return presetFor(toast.type);
3078
+ }, [
3079
+ toast.type
3080
+ ]);
3081
+ var _toast_background;
3082
+ var background = (_toast_background = toast.background) !== null && _toast_background !== void 0 ? _toast_background : "solid";
3083
+ var _toast_message;
3084
+ var rawMessage = (_toast_message = toast.message) !== null && _toast_message !== void 0 ? _toast_message : "";
3085
+ var hasMessage = rawMessage.trim().length > 0;
3086
+ var handleClose = function() {
3087
+ setIsExiting(true);
3088
+ setTimeout(function() {
3089
+ return onClose(toast.id);
3090
+ }, 300);
3091
+ };
3092
+ var handleAction = function(action) {
3093
+ action === null || action === void 0 ? void 0 : action();
3094
+ handleClose();
3095
+ };
3096
+ useEffect6(function() {
3097
+ if (toast.duration && toast.duration > 0 && !hovered && !hasActions) {
3098
+ var t = setTimeout(function() {
3099
+ return handleClose();
3100
+ }, toast.duration);
3101
+ return function() {
3102
+ return clearTimeout(t);
3103
+ };
3104
+ }
3105
+ return;
3106
+ }, [
3107
+ toast.duration,
3108
+ hovered,
3109
+ hasActions
3110
+ ]);
3111
+ var titleBottomClass = hasActions ? "bottom-[78px]" : "bottom-[33px]";
3112
+ var messageBottomClass = hasActions ? "bottom-[52px]" : "bottom-[16px]";
3113
+ var containerBgClass = background === "solid" ? preset.bgSolid : "bg-[rgba(255,255,255,1)]";
3114
+ var titleTextClass = background === "transparent" ? preset.stripTitleColor : "text-[rgba(255,255,255,1)]";
3115
+ var messageTextClass = background === "transparent" ? "text-[rgba(0,0,0,1)]" : "text-[rgba(255,255,255,1)]";
3116
+ var _toast_classNames;
3117
+ var slots = (_toast_classNames = toast.classNames) !== null && _toast_classNames !== void 0 ? _toast_classNames : {};
3118
+ var titleRight = "right-[80px] md:right-[140px]";
3119
+ var messageRight = "right-[70px] md:right-[94px]";
3120
+ var closeLeft = "left-[calc(100%-36px)] md:left-[289px]";
3121
+ var baseClass = cnArr([
3122
+ "relative flex overflow-hidden border border-transparent transition-all duration-300",
3123
+ preset.container,
3124
+ containerBgClass,
3125
+ isExiting ? "opacity-0 translate-x-full" : "opacity-100 translate-x-0",
3126
+ slots.base
3127
+ ]);
3128
+ var stripClass = cnArr([
3129
+ "absolute top-0 left-[5px] w-[5px] h-full rounded-[20px_0_0_20px]",
3130
+ preset.stripBg,
3131
+ slots.strip
3132
+ ]);
3133
+ var iconWrapClass = cnArr([
3134
+ "absolute left-[36px] top-[22px] h-[26px] w-[26px]",
3135
+ slots.icon
3136
+ ]);
3137
+ var iconImgClass = "block h-[26px] w-[26px] object-contain";
3138
+ var isTitleCentered = !hasActions && !hasMessage;
3139
+ var titleTopClass = isTitleCentered ? "top-1/2 -translate-y-1/2" : "top-[13px]";
3140
+ var titleClass = cnArr([
3141
+ "absolute left-[80px]",
3142
+ titleTopClass,
3143
+ titleRight,
3144
+ !isTitleCentered && titleBottomClass,
3145
+ 'font-["Poppins"] text-[16px] font-[700] leading-none overflow-hidden text-ellipsis whitespace-nowrap',
3146
+ titleTextClass,
3147
+ slots.title
3148
+ ]);
3149
+ var messageClass = cnArr([
3150
+ "absolute left-[80px] top-[39px]",
3151
+ messageRight,
3152
+ messageBottomClass,
3153
+ 'font-["Poppins"] text-[10px] font-[400] leading-none truncate',
3154
+ messageTextClass,
3155
+ slots.message
3156
+ ]);
3157
+ var closeBtnClass = cnArr([
3158
+ "absolute top-[27px] h-[14px] w-[14px]",
3159
+ closeLeft,
3160
+ slots.close
3161
+ ]);
3162
+ var actionsWrapClass = cnArr([
3163
+ "absolute left-[80px] right-[12px] md:right-[22px] bottom-[10px] flex flex-wrap gap-2",
3164
+ slots.actions
3165
+ ]);
3166
+ var primaryActionClass = cnArr([
3167
+ "inline-flex w-fit whitespace-nowrap items-center justify-center rounded-lg",
3168
+ "bg-[rgba(17,24,39,1)] px-3 py-2 text-[12px] font-[600] text-[rgba(255,255,255,1)] transition-colors hover:bg-[rgba(31,41,55,1)]",
3169
+ slots.primaryAction
3170
+ ]);
3171
+ var secondaryActionClass = cnArr([
3172
+ "inline-flex w-fit whitespace-nowrap items-center justify-center rounded-lg",
3173
+ "border border-[rgba(255,255,255,0.6)] bg-[rgba(255,255,255,0.15)] px-3 py-2 text-[12px] font-[600] text-[rgba(255,255,255,1)] transition-colors hover:bg-[rgba(255,255,255,0.22)]",
3174
+ slots.secondaryAction
3175
+ ]);
3176
+ var iconSrc = iconFor(toast.type, background);
3177
+ var closeSrc = closeIconFor(background);
3178
+ return /* @__PURE__ */ React13.createElement("div", {
3179
+ onMouseEnter: function() {
3180
+ return setHovered(true);
3181
+ },
3182
+ onMouseLeave: function() {
3183
+ return setHovered(false);
3184
+ },
3185
+ className: baseClass,
3186
+ role: "status",
3187
+ "aria-live": "polite"
3188
+ }, /* @__PURE__ */ React13.createElement("div", {
3189
+ className: stripClass,
3190
+ "aria-hidden": "true"
3191
+ }), /* @__PURE__ */ React13.createElement("div", {
3192
+ className: iconWrapClass,
3193
+ "aria-hidden": "true"
3194
+ }, /* @__PURE__ */ React13.createElement("img", {
3195
+ src: iconSrc,
3196
+ alt: "",
3197
+ className: iconImgClass
3198
+ })), /* @__PURE__ */ React13.createElement("h4", {
3199
+ className: titleClass
3200
+ }, toast.title), hasMessage && /* @__PURE__ */ React13.createElement("p", {
3201
+ className: messageClass
3202
+ }, rawMessage), !hasActions && /* @__PURE__ */ React13.createElement("button", {
3203
+ onClick: handleClose,
3204
+ className: closeBtnClass,
3205
+ "aria-label": "Close"
3206
+ }, /* @__PURE__ */ React13.createElement("img", {
3207
+ src: closeSrc,
3208
+ alt: "",
3209
+ className: "block h-[14px] w-[14px] object-contain",
3210
+ "aria-hidden": "true"
3211
+ })), hasActions && /* @__PURE__ */ React13.createElement("div", {
3212
+ className: actionsWrapClass
3213
+ }, ((_toast_actions = toast.actions) === null || _toast_actions === void 0 ? void 0 : _toast_actions[0]) && /* @__PURE__ */ React13.createElement("button", {
3214
+ onClick: function() {
3215
+ var _toast_actions_, _toast_actions;
3216
+ return handleAction((_toast_actions = toast.actions) === null || _toast_actions === void 0 ? void 0 : (_toast_actions_ = _toast_actions[0]) === null || _toast_actions_ === void 0 ? void 0 : _toast_actions_.onClick);
3217
+ },
3218
+ className: primaryActionClass
3219
+ }, toast.actions[0].label), ((_toast_actions1 = toast.actions) === null || _toast_actions1 === void 0 ? void 0 : _toast_actions1[1]) && /* @__PURE__ */ React13.createElement("button", {
3220
+ onClick: function() {
3221
+ var _toast_actions_, _toast_actions;
3222
+ return handleAction((_toast_actions = toast.actions) === null || _toast_actions === void 0 ? void 0 : (_toast_actions_ = _toast_actions[1]) === null || _toast_actions_ === void 0 ? void 0 : _toast_actions_.onClick);
3223
+ },
3224
+ className: secondaryActionClass
3225
+ }, toast.actions[1].label)));
3226
+ };
3227
+ ToastItem.displayName = "ToastItem";
3228
+ var posClass = function(p) {
3229
+ switch(p){
3230
+ case "top-left":
3231
+ return "top-4 left-4";
3232
+ case "top-center":
3233
+ return "top-4 left-1/2 -translate-x-1/2";
3234
+ case "top-right":
3235
+ return "top-4 right-4";
3236
+ case "bottom-left":
3237
+ return "bottom-4 left-4";
3238
+ case "bottom-center":
3239
+ return "bottom-4 left-1/2 -translate-x-1/2";
3240
+ case "bottom-right":
3241
+ return "bottom-4 right-4";
3242
+ default:
3243
+ return "top-4 right-4";
3244
+ }
3245
+ };
3246
+ var ToastMessageBase = function(param) {
3247
+ var toasts = param.toasts, position = param.position, onClose = param.onClose;
3248
+ return /* @__PURE__ */ React13.createElement("div", {
3249
+ className: cn5("fixed z-[9999] flex flex-col gap-3 pointer-events-none", posClass(position))
3250
+ }, toasts.map(function(t) {
3251
+ return /* @__PURE__ */ React13.createElement("div", {
3252
+ key: t.id,
3253
+ className: "pointer-events-auto"
3254
+ }, /* @__PURE__ */ React13.createElement(ToastItem, {
3255
+ toast: t,
3256
+ onClose: onClose
3257
+ }));
3258
+ }));
3259
+ };
3260
+ ToastMessageBase.displayName = "ToastMessage";
3261
+ var ToastMessage = ToastMessageBase;
3262
+ ToastMessage.cn = cn5;
3263
+ ToastMessage.titleForType = titleForType;
3264
+ ToastMessage.displayName = "ToastMessage";
2893
3265
  // src/components/Dropdown.tsx
2894
- import React13, { useState as useState9, useRef as useRef3, useEffect as useEffect6 } from "react";
3266
+ import React14, { useState as useState10, useRef as useRef3, useEffect as useEffect7 } from "react";
2895
3267
  var variantStyles = {
2896
3268
  basic: "bg-blue-600 text-white hover:bg-blue-700",
2897
3269
  outline: "border border-black-600 text-blue-600 hover:bg-blue-50",
@@ -2904,13 +3276,13 @@ var variantStyles = {
2904
3276
  };
2905
3277
  var Dropdown = function(param) {
2906
3278
  var options = param.options, value = param.value, onSelect = param.onSelect, _param_variant = param.variant, variant = _param_variant === void 0 ? "basic" : _param_variant, _param_className = param.className, className = _param_className === void 0 ? "" : _param_className, _param_placeholder = param.placeholder, placeholder = _param_placeholder === void 0 ? "Select an option" : _param_placeholder;
2907
- var _useState9 = _sliced_to_array(useState9(false), 2), open = _useState9[0], setOpen = _useState9[1];
2908
- var _useState91 = _sliced_to_array(useState9(null), 2), internalSelected = _useState91[0], setInternalSelected = _useState91[1];
3279
+ var _useState10 = _sliced_to_array(useState10(false), 2), open = _useState10[0], setOpen = _useState10[1];
3280
+ var _useState101 = _sliced_to_array(useState10(null), 2), internalSelected = _useState101[0], setInternalSelected = _useState101[1];
2909
3281
  var dropdownRef = useRef3(null);
2910
3282
  var selectedOption = value !== void 0 ? options.find(function(opt) {
2911
3283
  return opt.value === value;
2912
3284
  }) : internalSelected;
2913
- useEffect6(function() {
3285
+ useEffect7(function() {
2914
3286
  var handleClickOutside = function handleClickOutside(event) {
2915
3287
  if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
2916
3288
  setOpen(false);
@@ -2931,18 +3303,18 @@ var Dropdown = function(param) {
2931
3303
  onSelect(option.value);
2932
3304
  setOpen(false);
2933
3305
  };
2934
- return /* @__PURE__ */ React13.createElement("div", {
3306
+ return /* @__PURE__ */ React14.createElement("div", {
2935
3307
  ref: dropdownRef,
2936
3308
  className: "relative w-56 ".concat(className)
2937
- }, /* @__PURE__ */ React13.createElement("button", {
3309
+ }, /* @__PURE__ */ React14.createElement("button", {
2938
3310
  onClick: function() {
2939
3311
  return setOpen(!open);
2940
3312
  },
2941
3313
  className: "w-full text-left px-4 py-2 rounded-md transition-all duration-200 ".concat(variantStyles[variant])
2942
- }, (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.key) || placeholder), open && /* @__PURE__ */ React13.createElement("div", {
3314
+ }, (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.key) || placeholder), open && /* @__PURE__ */ React14.createElement("div", {
2943
3315
  className: "absolute mt-2 w-full bg-white border border-gray-200 rounded-md shadow-lg z-20"
2944
3316
  }, options.map(function(opt) {
2945
- return /* @__PURE__ */ React13.createElement("div", {
3317
+ return /* @__PURE__ */ React14.createElement("div", {
2946
3318
  key: opt.value,
2947
3319
  onClick: function() {
2948
3320
  return handleSelect(opt);
@@ -2953,11 +3325,16 @@ var Dropdown = function(param) {
2953
3325
  };
2954
3326
  Dropdown.displayName = "Dropdown";
2955
3327
  // src/components/Filter.tsx
2956
- import React14, { useState as useState10 } from "react";
3328
+ import React15, { useState as useState11, useEffect as useEffect8, useRef as useRef4 } from "react";
2957
3329
  import { X as X2, ChevronDown as ChevronDown2 } from "lucide-react";
3330
+ import { createPortal } from "react-dom";
3331
+ var fieldStyles = {
3332
+ small: "w-full px-3 py-2 pr-5 bg-white border border-gray-300 rounded-md appearance-none focus:outline-none focus:ring-2 focus:ring-[#1761a3]",
3333
+ medium: "w-full px-4 py-3 pr-6 bg-white border border-slate-300 rounded-md appearance-none focus:outline-none focus:ring-2 focus:ring-[#1761a3]"
3334
+ };
2958
3335
  var Filter = function() {
2959
- var _useState10 = _sliced_to_array(useState10(false), 2), open = _useState10[0], setOpen = _useState10[1];
2960
- var _useState101 = _sliced_to_array(useState10({
3336
+ var _useState11 = _sliced_to_array(useState11(false), 2), open = _useState11[0], setOpen = _useState11[1];
3337
+ var _useState111 = _sliced_to_array(useState11({
2961
3338
  date: {
2962
3339
  start: null,
2963
3340
  end: null
@@ -2965,7 +3342,7 @@ var Filter = function() {
2965
3342
  activity: "",
2966
3343
  status: "",
2967
3344
  keyword: ""
2968
- }), 2), values = _useState101[0], setValues = _useState101[1];
3345
+ }), 2), values = _useState111[0], setValues = _useState111[1];
2969
3346
  var handleChange = function(name, value) {
2970
3347
  setValues(function(prev) {
2971
3348
  return _object_spread_props(_object_spread({}, prev), _define_property({}, name, value));
@@ -3002,9 +3379,9 @@ var Filter = function() {
3002
3379
  console.log("Applied Filters:", values);
3003
3380
  setOpen(false);
3004
3381
  };
3005
- return /* @__PURE__ */ React14.createElement("div", {
3382
+ return /* @__PURE__ */ React15.createElement("div", {
3006
3383
  className: "relative"
3007
- }, /* @__PURE__ */ React14.createElement(Button, {
3384
+ }, /* @__PURE__ */ React15.createElement(Button, {
3008
3385
  variant: "outline",
3009
3386
  className: "flex items-center gap-2 px-5 py-3 rounded-lg\r\n border border-[rgba(23,97,163,0.35)]\r\n bg-gradient-to-r from-[#f2fbf8] to-[#eef6fb]\r\n text-[#0f172a] font-semibold shadow-sm",
3010
3387
  onClick: function() {
@@ -3012,148 +3389,292 @@ var Filter = function() {
3012
3389
  return !p;
3013
3390
  });
3014
3391
  }
3015
- }, "Filter"), open && /* @__PURE__ */ React14.createElement("div", {
3392
+ }, "Filter"), open && /* @__PURE__ */ React15.createElement("div", {
3016
3393
  className: "absolute right-0 mt-3 z-50"
3017
- }, /* @__PURE__ */ React14.createElement(Card, {
3394
+ }, /* @__PURE__ */ React15.createElement(Card, {
3018
3395
  variant: "figma",
3019
3396
  className: "w-[360px] p-0 overflow-hidden bg-white"
3020
- }, /* @__PURE__ */ React14.createElement("div", {
3397
+ }, /* @__PURE__ */ React15.createElement("div", {
3021
3398
  className: "flex justify-between items-center px-5 py-3 border-b border-[rgba(23,97,163,0.35)]"
3022
- }, /* @__PURE__ */ React14.createElement("h3", {
3399
+ }, /* @__PURE__ */ React15.createElement("h3", {
3023
3400
  className: "text-md font-semibold"
3024
- }, "Add Filter"), /* @__PURE__ */ React14.createElement("button", {
3401
+ }, "Add Filter"), /* @__PURE__ */ React15.createElement("button", {
3025
3402
  onClick: function() {
3026
3403
  return setOpen(false);
3027
3404
  },
3028
3405
  className: "w-8 h-8 rounded-full bg-slate-100 flex items-center justify-center"
3029
- }, /* @__PURE__ */ React14.createElement(X2, {
3406
+ }, /* @__PURE__ */ React15.createElement(X2, {
3030
3407
  className: "w-4 h-4 text-slate-600"
3031
- }))), /* @__PURE__ */ React14.createElement(Section, {
3408
+ }))), /* @__PURE__ */ React15.createElement(Section, {
3032
3409
  title: "Date Range",
3033
3410
  onReset: function() {
3034
3411
  return resetField("date");
3035
3412
  }
3036
- }, /* @__PURE__ */ React14.createElement(Calendar, {
3413
+ }, /* @__PURE__ */ React15.createElement(Calendar, {
3037
3414
  enableRangeSelection: true,
3038
3415
  rangeValue: values.date,
3039
3416
  onRangeChange: function(range) {
3040
3417
  return handleChange("date", range);
3041
3418
  },
3042
3419
  size: "small"
3043
- })), /* @__PURE__ */ React14.createElement(Section, {
3044
- title: "Activity Type",
3045
- onReset: function() {
3046
- return resetField("activity");
3047
- }
3048
- }, /* @__PURE__ */ React14.createElement(MahatiActivity, {
3420
+ })), /* @__PURE__ */ React15.createElement("div", {
3421
+ className: "relative w-full"
3422
+ }, /* @__PURE__ */ React15.createElement("select", {
3049
3423
  value: values.activity,
3050
- onChange: function(v) {
3051
- return handleChange("activity", v);
3052
- }
3053
- })), /* @__PURE__ */ React14.createElement(Section, {
3054
- title: "Status",
3055
- onReset: function() {
3056
- return resetField("status");
3057
- }
3058
- }, /* @__PURE__ */ React14.createElement(MahatiStatus, {
3424
+ onChange: function(e) {
3425
+ return handleChange("activity", e.target.value);
3426
+ },
3427
+ className: "\r\n w-full appearance-none\r\n px-4 py-3 pr-10\r\n rounded-[6px]\r\n border border-slate-300\r\n bg-white text-sm\r\n focus:outline-none focus:ring-2 focus:ring-[#1761A3]\r\n "
3428
+ }, /* @__PURE__ */ React15.createElement("option", {
3429
+ value: ""
3430
+ }, "Select Activity"), /* @__PURE__ */ React15.createElement("option", null, "Activity List"), /* @__PURE__ */ React15.createElement("option", null, "Login"), /* @__PURE__ */ React15.createElement("option", null, "Update"), /* @__PURE__ */ React15.createElement("option", null, "Delete")), /* @__PURE__ */ React15.createElement(ChevronDown2, {
3431
+ className: "absolute right-3 top-1/2 -translate-y-1/2 w-4 h-4 text-slate-500 pointer-events-none"
3432
+ })), /* @__PURE__ */ React15.createElement("div", {
3433
+ className: "relative w-full"
3434
+ }, /* @__PURE__ */ React15.createElement("select", {
3059
3435
  value: values.status,
3060
- onChange: function(v) {
3061
- return handleChange("status", v);
3062
- }
3063
- })), /* @__PURE__ */ React14.createElement(Section, {
3064
- title: "Keyword search",
3065
- onReset: function() {
3066
- return resetField("keyword");
3067
- }
3068
- }, /* @__PURE__ */ React14.createElement(MahatiSearch, {
3436
+ onChange: function(e) {
3437
+ return handleChange("status", e.target.value);
3438
+ },
3439
+ className: "\r\n w-full appearance-none\r\n px-4 py-3 pr-10\r\n rounded-[6px]\r\n border border-slate-300\r\n bg-white text-sm\r\n focus:outline-none focus:ring-2 focus:ring-[#1761A3]\r\n "
3440
+ }, /* @__PURE__ */ React15.createElement("option", {
3441
+ value: ""
3442
+ }, "Select Status"), /* @__PURE__ */ React15.createElement("option", null, "Pending"), /* @__PURE__ */ React15.createElement("option", null, "Approved"), /* @__PURE__ */ React15.createElement("option", null, "Rejected")), /* @__PURE__ */ React15.createElement(ChevronDown2, {
3443
+ className: "absolute right-3 top-1/2 -translate-y-1/2 w-4 h-4 text-slate-500 pointer-events-none"
3444
+ })), /* @__PURE__ */ React15.createElement("input", {
3069
3445
  value: values.keyword,
3070
- onChange: function(v) {
3071
- return handleChange("keyword", v);
3072
- }
3073
- })), /* @__PURE__ */ React14.createElement("div", {
3446
+ onChange: function(e) {
3447
+ return handleChange("keyword", e.target.value);
3448
+ },
3449
+ placeholder: "Search...",
3450
+ className: "\r\n w-full px-4 py-3\r\n rounded-[6px]\r\n border border-slate-300\r\n bg-white text-sm\r\n focus:outline-none focus:ring-2 focus:ring-[#1761A3]\r\n "
3451
+ }), /* @__PURE__ */ React15.createElement("div", {
3074
3452
  className: "flex justify-between items-center px-5 py-4 bg-gradient-to-r from-[#f3fbf8] to-[#eef6fb]"
3075
- }, /* @__PURE__ */ React14.createElement(Button, {
3453
+ }, /* @__PURE__ */ React15.createElement(Button, {
3076
3454
  variant: "outline",
3077
3455
  className: "border-[#1761A3] bg-[#F0F8FF]",
3078
3456
  onClick: resetAll
3079
- }, "Reset all"), /* @__PURE__ */ React14.createElement(Button, {
3457
+ }, "Reset all"), /* @__PURE__ */ React15.createElement(Button, {
3080
3458
  className: "text-white bg-gradient-to-r from-[#1761a3] to-[#4daf83]",
3081
3459
  onClick: applyFilters
3082
3460
  }, "Apply Now")))));
3083
3461
  };
3084
3462
  var Section = function(param) {
3085
3463
  var title = param.title, onReset = param.onReset, children = param.children;
3086
- return /* @__PURE__ */ React14.createElement("div", {
3464
+ return /* @__PURE__ */ React15.createElement("div", {
3087
3465
  className: "px-5 py-4 bg-gradient-to-r from-[#f3fbf8] to-[#eef6fb]\r\n border-b border-[rgba(23,97,163,0.35)]"
3088
- }, /* @__PURE__ */ React14.createElement("div", {
3466
+ }, /* @__PURE__ */ React15.createElement("div", {
3089
3467
  className: "flex justify-between items-center mb-3"
3090
- }, /* @__PURE__ */ React14.createElement("h6", {
3468
+ }, /* @__PURE__ */ React15.createElement("h6", {
3091
3469
  className: "font-semibold text-sm"
3092
- }, title), /* @__PURE__ */ React14.createElement("button", {
3470
+ }, title), /* @__PURE__ */ React15.createElement("button", {
3093
3471
  onClick: onReset,
3094
3472
  className: "text-[#1761a3] font-semibold text-sm"
3095
3473
  }, "Reset")), children);
3096
3474
  };
3097
- var activityOptions = [
3098
- "Activity List",
3099
- "Login",
3100
- "Update",
3101
- "Delete"
3102
- ];
3103
- var statusOptions = [
3104
- "Active",
3105
- "Inactive",
3106
- "Pending"
3475
+ var DEFAULT_ACTIVITY_OPTIONS = [
3476
+ {
3477
+ label: "Select Activity",
3478
+ value: ""
3479
+ },
3480
+ {
3481
+ label: "Activity List",
3482
+ value: "Activity List"
3483
+ },
3484
+ {
3485
+ label: "Login",
3486
+ value: "Login"
3487
+ },
3488
+ {
3489
+ label: "Update",
3490
+ value: "Update"
3491
+ },
3492
+ {
3493
+ label: "Delete",
3494
+ value: "Delete"
3495
+ }
3107
3496
  ];
3108
3497
  var MahatiActivity = function(param) {
3109
- var value = param.value, onChange = param.onChange;
3110
- return /* @__PURE__ */ React14.createElement(Select, {
3111
- value: value,
3112
- onChange: onChange,
3113
- placeholder: "Select Activity",
3114
- options: activityOptions
3115
- });
3498
+ var value = param.value, onChange = param.onChange, _param_options = param.options, options = _param_options === void 0 ? DEFAULT_ACTIVITY_OPTIONS : _param_options, _param_size = param.size, size = _param_size === void 0 ? "medium" : _param_size;
3499
+ var _options_find;
3500
+ var _useState11 = _sliced_to_array(useState11(false), 2), open = _useState11[0], setOpen = _useState11[1];
3501
+ var triggerRef = useRef4(null);
3502
+ var dropdownRef = useRef4(null);
3503
+ var _useState111 = _sliced_to_array(useState11(null), 2), pos = _useState111[0], setPos = _useState111[1];
3504
+ var selectedLabel = ((_options_find = options.find(function(o) {
3505
+ return o.value == value;
3506
+ })) === null || _options_find === void 0 ? void 0 : _options_find.label) || "Select Activity";
3507
+ var updatePosition = function() {
3508
+ if (!triggerRef.current) return;
3509
+ var rect = triggerRef.current.getBoundingClientRect();
3510
+ setPos({
3511
+ top: rect.bottom + window.scrollY + 6,
3512
+ left: rect.left + window.scrollX,
3513
+ width: rect.width
3514
+ });
3515
+ };
3516
+ useEffect8(function() {
3517
+ if (!open) return;
3518
+ updatePosition();
3519
+ window.addEventListener("scroll", updatePosition, true);
3520
+ window.addEventListener("resize", updatePosition);
3521
+ return function() {
3522
+ window.removeEventListener("scroll", updatePosition, true);
3523
+ window.removeEventListener("resize", updatePosition);
3524
+ };
3525
+ }, [
3526
+ open
3527
+ ]);
3528
+ useEffect8(function() {
3529
+ var handler = function(e) {
3530
+ var _triggerRef_current, _dropdownRef_current;
3531
+ if (((_triggerRef_current = triggerRef.current) === null || _triggerRef_current === void 0 ? void 0 : _triggerRef_current.contains(e.target)) || ((_dropdownRef_current = dropdownRef.current) === null || _dropdownRef_current === void 0 ? void 0 : _dropdownRef_current.contains(e.target))) {
3532
+ return;
3533
+ }
3534
+ setOpen(false);
3535
+ };
3536
+ document.addEventListener("mousedown", handler);
3537
+ return function() {
3538
+ return document.removeEventListener("mousedown", handler);
3539
+ };
3540
+ }, []);
3541
+ return /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement("div", {
3542
+ ref: triggerRef,
3543
+ onClick: function() {
3544
+ return setOpen(function(p) {
3545
+ return !p;
3546
+ });
3547
+ },
3548
+ className: "\n ".concat(fieldStyles[size], "\n cursor-pointer\n flex items-center justify-between\n relative\n ").concat(open ? "border-[#1761a3] ring-2 ring-[#1761a3]" : "", "\n ")
3549
+ }, /* @__PURE__ */ React15.createElement("span", {
3550
+ className: "truncate"
3551
+ }, selectedLabel), /* @__PURE__ */ React15.createElement(ChevronDown2, {
3552
+ className: "w-4 h-4 text-slate-500 transition-transform ".concat(open ? "rotate-180" : "")
3553
+ })), open && pos && createPortal(/* @__PURE__ */ React15.createElement("div", {
3554
+ ref: dropdownRef,
3555
+ style: {
3556
+ position: "absolute",
3557
+ top: pos.top,
3558
+ left: pos.left,
3559
+ width: pos.width
3560
+ },
3561
+ className: "\r\n z-[9999]\r\n rounded-[6px]\r\n border border-slate-300\r\n bg-white\r\n shadow-xl\r\n max-h-[240px]\r\n overflow-y-auto\r\n "
3562
+ }, options.map(function(opt) {
3563
+ return /* @__PURE__ */ React15.createElement("div", {
3564
+ key: String(opt.value),
3565
+ onClick: function() {
3566
+ onChange(opt.value);
3567
+ setOpen(false);
3568
+ },
3569
+ className: "\r\n px-4 py-2\r\n text-sm\r\n cursor-pointer\r\n text-black hover:bg-[#1761a3] hover:text-white\r\n "
3570
+ }, opt.label);
3571
+ })), document.body));
3116
3572
  };
3573
+ var DEFAULT_STATUS_OPTIONS = [
3574
+ {
3575
+ label: "Select Status",
3576
+ value: ""
3577
+ },
3578
+ {
3579
+ label: "Pending",
3580
+ value: "Pending"
3581
+ },
3582
+ {
3583
+ label: "Approved",
3584
+ value: "Approved"
3585
+ },
3586
+ {
3587
+ label: "Rejected",
3588
+ value: "Rejected"
3589
+ }
3590
+ ];
3117
3591
  var MahatiStatus = function(param) {
3118
- var value = param.value, onChange = param.onChange;
3119
- return /* @__PURE__ */ React14.createElement(Select, {
3120
- value: value,
3121
- onChange: onChange,
3122
- placeholder: "Select Status",
3123
- options: statusOptions
3124
- });
3592
+ var value = param.value, onChange = param.onChange, _param_options = param.options, options = _param_options === void 0 ? DEFAULT_STATUS_OPTIONS : _param_options, _param_size = param.size, size = _param_size === void 0 ? "medium" : _param_size;
3593
+ var _options_find;
3594
+ var _useState11 = _sliced_to_array(useState11(false), 2), open = _useState11[0], setOpen = _useState11[1];
3595
+ var triggerRef = useRef4(null);
3596
+ var dropdownRef = useRef4(null);
3597
+ var _useState111 = _sliced_to_array(useState11(null), 2), pos = _useState111[0], setPos = _useState111[1];
3598
+ var selectedLabel = (options === null || options === void 0 ? void 0 : (_options_find = options.find(function(o) {
3599
+ return o.value == value;
3600
+ })) === null || _options_find === void 0 ? void 0 : _options_find.label) || "Select Status";
3601
+ var updatePosition = function() {
3602
+ if (!triggerRef.current) return;
3603
+ var rect = triggerRef.current.getBoundingClientRect();
3604
+ setPos({
3605
+ top: rect.bottom + window.scrollY + 6,
3606
+ left: rect.left + window.scrollX,
3607
+ width: rect.width
3608
+ });
3609
+ };
3610
+ useEffect8(function() {
3611
+ if (!open) return;
3612
+ updatePosition();
3613
+ window.addEventListener("scroll", updatePosition, true);
3614
+ window.addEventListener("resize", updatePosition);
3615
+ return function() {
3616
+ window.removeEventListener("scroll", updatePosition, true);
3617
+ window.removeEventListener("resize", updatePosition);
3618
+ };
3619
+ }, [
3620
+ open
3621
+ ]);
3622
+ useEffect8(function() {
3623
+ var handler = function(e) {
3624
+ var _triggerRef_current, _dropdownRef_current;
3625
+ if (((_triggerRef_current = triggerRef.current) === null || _triggerRef_current === void 0 ? void 0 : _triggerRef_current.contains(e.target)) || ((_dropdownRef_current = dropdownRef.current) === null || _dropdownRef_current === void 0 ? void 0 : _dropdownRef_current.contains(e.target))) {
3626
+ return;
3627
+ }
3628
+ setOpen(false);
3629
+ };
3630
+ document.addEventListener("mousedown", handler);
3631
+ return function() {
3632
+ return document.removeEventListener("mousedown", handler);
3633
+ };
3634
+ }, []);
3635
+ return /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement("div", {
3636
+ ref: triggerRef,
3637
+ onClick: function() {
3638
+ return setOpen(function(p) {
3639
+ return !p;
3640
+ });
3641
+ },
3642
+ className: "\n ".concat(fieldStyles[size], "\n cursor-pointer\n flex items-center justify-between\n relative\n ").concat(open ? "border-[#1761a3] ring-2 ring-[#1761a3]" : "", "\n ")
3643
+ }, /* @__PURE__ */ React15.createElement("span", {
3644
+ className: "truncate"
3645
+ }, selectedLabel), /* @__PURE__ */ React15.createElement(ChevronDown2, {
3646
+ className: "w-4 h-4 text-slate-500 transition-transform ".concat(open ? "rotate-180" : "")
3647
+ })), open && pos && createPortal(/* @__PURE__ */ React15.createElement("div", {
3648
+ ref: dropdownRef,
3649
+ style: {
3650
+ position: "absolute",
3651
+ top: pos.top,
3652
+ left: pos.left,
3653
+ width: pos.width
3654
+ },
3655
+ className: "\r\n z-[9999]\r\n rounded-[6px]\r\n border border-slate-300\r\n bg-white\r\n shadow-xl\r\n max-h-[240px]\r\n overflow-y-auto\r\n "
3656
+ }, options === null || options === void 0 ? void 0 : options.map(function(opt) {
3657
+ return /* @__PURE__ */ React15.createElement("div", {
3658
+ key: String(opt.value),
3659
+ onClick: function() {
3660
+ onChange(opt.value);
3661
+ setOpen(false);
3662
+ },
3663
+ className: "\r\n px-4 py-2\r\n text-sm\r\n cursor-pointer\r\n text-black hover:bg-[#1761a3] hover:text-white\r\n "
3664
+ }, opt.label);
3665
+ })), document.body));
3125
3666
  };
3126
3667
  var MahatiSearch = function(param) {
3127
- var value = param.value, onChange = param.onChange;
3128
- return /* @__PURE__ */ React14.createElement("input", {
3668
+ var value = param.value, onChange = param.onChange, _param_placeholder = param.placeholder, placeholder = _param_placeholder === void 0 ? "Search..." : _param_placeholder, _param_size = param.size, size = _param_size === void 0 ? "medium" : _param_size;
3669
+ return /* @__PURE__ */ React15.createElement("input", {
3129
3670
  type: "text",
3130
3671
  value: value,
3131
- placeholder: "Search...",
3672
+ placeholder: placeholder,
3132
3673
  onChange: function(e) {
3133
3674
  return onChange(e.target.value);
3134
3675
  },
3135
- className: "w-full px-4 py-3 rounded-[6px]\r\n border border-slate-300 bg-white\r\n focus:outline-none focus:ring-2 focus:ring-[#1761a3]"
3676
+ className: fieldStyles[size]
3136
3677
  });
3137
3678
  };
3138
- var Select = function(param) {
3139
- var value = param.value, options = param.options, placeholder = param.placeholder, onChange = param.onChange;
3140
- return /* @__PURE__ */ React14.createElement("div", {
3141
- className: "relative"
3142
- }, /* @__PURE__ */ React14.createElement("select", {
3143
- value: value,
3144
- onChange: function(e) {
3145
- return onChange(e.target.value);
3146
- },
3147
- className: "w-full appearance-none px-4 py-3 pr-10\r\n rounded-[6px] border border-slate-300 bg-white\r\n focus:outline-none focus:ring-2 focus:ring-[#1761a3]"
3148
- }, /* @__PURE__ */ React14.createElement("option", {
3149
- value: ""
3150
- }, placeholder), options.map(function(opt) {
3151
- return /* @__PURE__ */ React14.createElement("option", {
3152
- key: opt
3153
- }, opt);
3154
- })), /* @__PURE__ */ React14.createElement(ChevronDown2, {
3155
- className: "absolute right-3 top-1/2 -translate-y-1/2\r\n w-4 h-4 text-slate-500 pointer-events-none"
3156
- }));
3157
- };
3158
- export { MahatiActivity, Button as MahatiButton, Calendar as MahatiCalendar, Card as MahatiCard, ChartInterface as MahatiChart, Dropdown as MahatiDropdown, Filter as MahatiFilter, FormContainer as MahatiFormContainer, Input as MahatiInput, Modal as MahatiModal, MahatiSearch, MahatiStatus, TabbedInterface as MahatiTabbedInterface, TabbedInterface2 as MahatiTabbedInterfaceTailwind, Table as MahatiTable, Table2 as MahatiTableTailwind, Tooltip as MahatiTooltip };
3679
+ export { MahatiActivity, Button as MahatiButton, Calendar as MahatiCalendar, Card as MahatiCard, ChartInterface as MahatiChart, Dropdown as MahatiDropdown, Filter as MahatiFilter, FormContainer as MahatiFormContainer, Input as MahatiInput, Modal as MahatiModal, MahatiSearch, MahatiStatus, TabbedInterface as MahatiTabbedInterface, TabbedInterface2 as MahatiTabbedInterfaceTailwind, Table as MahatiTable, Table2 as MahatiTableTailwind, ToastMessage as MahatiToastMessage, Tooltip as MahatiTooltip };
3159
3680
  //# sourceMappingURL=index.mjs.map