elseware-ui 2.34.0 → 2.35.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.
package/dist/index.js CHANGED
@@ -508,6 +508,107 @@ function getSafeRedirect(options = {}) {
508
508
  return fallback;
509
509
  }
510
510
  }
511
+ function getErrorMessage(error) {
512
+ if (!error) {
513
+ return "Unknown configuration error";
514
+ }
515
+ if (error instanceof Error) {
516
+ return error.message || "Unknown configuration error";
517
+ }
518
+ if (typeof error === "string") {
519
+ return error;
520
+ }
521
+ try {
522
+ return JSON.stringify(error, null, 2);
523
+ } catch {
524
+ return "Unknown configuration error";
525
+ }
526
+ }
527
+ function getErrorStack(error) {
528
+ if (error instanceof Error) {
529
+ return error.stack;
530
+ }
531
+ return null;
532
+ }
533
+ function EnvErrorScreen({
534
+ error,
535
+ title = "Invalid Environment Configuration",
536
+ description = "The app could not start because one or more environment values are missing or invalid.",
537
+ footer,
538
+ showStack = false
539
+ }) {
540
+ const message = getErrorMessage(error);
541
+ const stack = getErrorStack(error);
542
+ const lines = message.split("\n").filter(Boolean);
543
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-screen flex items-center justify-center bg-black text-white p-8", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-4xl w-full rounded-xl border border-red-500 bg-red-950/30 p-6 shadow-2xl shadow-red-950/40", children: [
544
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-5", children: [
545
+ /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "text-2xl font-bold text-red-400 mb-2", children: title }),
546
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-red-100/80", children: description })
547
+ ] }),
548
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-lg border border-red-500/30 bg-black/40 p-4", children: /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "overflow-auto text-sm whitespace-pre-wrap text-red-100", children: lines.length > 0 ? lines.join("\n") : "Unknown configuration error" }) }),
549
+ showStack && stack && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-4 rounded-lg border border-red-500/20 bg-black/30 p-4", children: [
550
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-red-300", children: "Stack trace" }),
551
+ /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "overflow-auto text-xs whitespace-pre-wrap text-red-100/70", children: stack })
552
+ ] }),
553
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-5 text-sm text-red-100/70", children: footer ?? /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
554
+ "Fix your ",
555
+ /* @__PURE__ */ jsxRuntime.jsx("code", { className: "text-red-200", children: ".env" }),
556
+ " values and restart the development server."
557
+ ] }) })
558
+ ] }) });
559
+ }
560
+ var EnvErrorScreen_default = EnvErrorScreen;
561
+ function ConfigBootstrap({
562
+ config,
563
+ loadApp,
564
+ ErrorComponent = EnvErrorScreen_default,
565
+ LoadingComponent,
566
+ loadingFallback = null,
567
+ showStack = false
568
+ }) {
569
+ const [RootApp, setRootApp] = React3.useState(null);
570
+ const [loadError, setLoadError] = React3.useState(null);
571
+ React3.useEffect(() => {
572
+ if (!config.isValid) {
573
+ return;
574
+ }
575
+ let mounted = true;
576
+ loadApp().then((module) => {
577
+ if (mounted) {
578
+ setRootApp(() => module.default);
579
+ }
580
+ }).catch((error) => {
581
+ if (mounted) {
582
+ setLoadError(error);
583
+ }
584
+ });
585
+ return () => {
586
+ mounted = false;
587
+ };
588
+ }, [config, loadApp]);
589
+ if (!config.isValid) {
590
+ return /* @__PURE__ */ jsxRuntime.jsx(ErrorComponent, { error: config.error, showStack });
591
+ }
592
+ if (loadError) {
593
+ return /* @__PURE__ */ jsxRuntime.jsx(
594
+ ErrorComponent,
595
+ {
596
+ error: loadError,
597
+ title: "Application Startup Error",
598
+ description: "The app configuration was valid, but the application failed while loading.",
599
+ showStack
600
+ }
601
+ );
602
+ }
603
+ if (!RootApp) {
604
+ if (LoadingComponent) {
605
+ return /* @__PURE__ */ jsxRuntime.jsx(LoadingComponent, {});
606
+ }
607
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: loadingFallback });
608
+ }
609
+ return /* @__PURE__ */ jsxRuntime.jsx(RootApp, {});
610
+ }
611
+ var ConfigBootstrap_default = ConfigBootstrap;
511
612
  var EUIContext = React3.createContext(null);
512
613
  var EUIProvider = ({
513
614
  config,
@@ -710,6 +811,77 @@ var checkboxVariants = {
710
811
  light: "checked:bg-eui-light-400 checked:border-eui-light-400 dark:checked:bg-gray-200 dark:checked:border-gray-200",
711
812
  dark: "checked:bg-eui-dark-500 checked:border-eui-dark-500 dark:checked:bg-eui-dark-300 dark:checked:border-eui-dark-300"
712
813
  };
814
+ var spinnerSizes = {
815
+ xs: "w-4 h-4",
816
+ sm: "w-5 h-5",
817
+ md: "w-8 h-8",
818
+ lg: "w-12 h-12",
819
+ xl: "w-16 h-16"
820
+ };
821
+ var spinnerDotSizes = {
822
+ xs: "w-1 h-1",
823
+ sm: "w-1.5 h-1.5",
824
+ md: "w-2 h-2",
825
+ lg: "w-3 h-3",
826
+ xl: "w-4 h-4"
827
+ };
828
+ var spinnerBarSizes = {
829
+ xs: "w-0.5 h-3",
830
+ sm: "w-1 h-4",
831
+ md: "w-1.5 h-6",
832
+ lg: "w-2 h-8",
833
+ xl: "w-2.5 h-10"
834
+ };
835
+ var spinnerTextSizes = {
836
+ xs: "text-xs",
837
+ sm: "text-xs",
838
+ md: "text-sm",
839
+ lg: "text-base",
840
+ xl: "text-lg"
841
+ };
842
+ var spinnerStrokeSizes = {
843
+ xs: "border-2",
844
+ sm: "border-2",
845
+ md: "border-4",
846
+ lg: "border-4",
847
+ xl: "border-[5px]"
848
+ };
849
+ var spinnerVariants = {
850
+ default: "text-gray-500 dark:text-gray-300",
851
+ primary: "text-eui-primary-500 dark:text-eui-primary-400",
852
+ secondary: "text-eui-secondary-500 dark:text-eui-secondary-400",
853
+ success: "text-eui-success-500 dark:text-eui-success-400",
854
+ danger: "text-eui-danger-500 dark:text-eui-danger-400",
855
+ warning: "text-eui-warning-500 dark:text-eui-warning-400",
856
+ info: "text-eui-info-500 dark:text-eui-info-400",
857
+ light: "text-eui-light-500 dark:text-eui-light-300",
858
+ dark: "text-eui-dark-500 dark:text-eui-dark-300"
859
+ };
860
+ var spinnerTrackVariants = {
861
+ default: "border-gray-200 dark:border-gray-700",
862
+ primary: "border-eui-primary-500/20",
863
+ secondary: "border-eui-secondary-500/20",
864
+ success: "border-eui-success-500/20",
865
+ danger: "border-eui-danger-500/20",
866
+ warning: "border-eui-warning-500/20",
867
+ info: "border-eui-info-500/20",
868
+ light: "border-eui-light-500/20",
869
+ dark: "border-eui-dark-500/20"
870
+ };
871
+ var gridDotSizes = {
872
+ xs: "h-1 w-1",
873
+ sm: "h-1.5 w-1.5",
874
+ md: "h-2 w-2",
875
+ lg: "h-2.5 w-2.5",
876
+ xl: "h-3 w-3"
877
+ };
878
+ var waveItemSizes = {
879
+ xs: "h-3 w-0.5",
880
+ sm: "h-4 w-1",
881
+ md: "h-6 w-1.5",
882
+ lg: "h-8 w-2",
883
+ xl: "h-10 w-2.5"
884
+ };
713
885
  var Avatar = ({
714
886
  alt,
715
887
  icon,
@@ -5039,6 +5211,227 @@ function ProgressBarRating({
5039
5211
  ] });
5040
5212
  }
5041
5213
  var ProgressBarRating_default = ProgressBarRating;
5214
+ var Backdrop = ({ children, styles }) => {
5215
+ return /* @__PURE__ */ jsxRuntime.jsx(
5216
+ "div",
5217
+ {
5218
+ className: classNames16__default.default({
5219
+ "bg-black/75 top-0 bottom-0 left-0 right-0 z-50 fixed inset-0 flex items-center justify-center overflow-hidden": true,
5220
+ [`${styles}`]: styles
5221
+ }),
5222
+ children
5223
+ }
5224
+ );
5225
+ };
5226
+ var Backdrop_default = Backdrop;
5227
+ var DEFAULT_SPINNER_TYPE = "border";
5228
+ var DEFAULT_SPINNER_SIZE = "md";
5229
+ var DEFAULT_SPINNER_VARIANT = "primary";
5230
+ var DEFAULT_SPINNER_ARIA_LABEL = "Loading";
5231
+ var SPINNER_DOT_COUNT = 3;
5232
+ var SPINNER_BAR_COUNT = 5;
5233
+ var SPINNER_GRID_COUNT = 9;
5234
+ var SPINNER_WAVE_COUNT = 5;
5235
+ function Spinner({
5236
+ type = DEFAULT_SPINNER_TYPE,
5237
+ variant = DEFAULT_SPINNER_VARIANT,
5238
+ size = DEFAULT_SPINNER_SIZE,
5239
+ label,
5240
+ showLabel = true,
5241
+ centered = false,
5242
+ fullscreen = false,
5243
+ overlay = false,
5244
+ backdrop = true,
5245
+ direction = "vertical",
5246
+ className,
5247
+ spinnerClassName,
5248
+ labelClassName,
5249
+ ariaLabel = DEFAULT_SPINNER_ARIA_LABEL,
5250
+ ...rest
5251
+ }) {
5252
+ const hasVisibleLabel = Boolean(label) && showLabel;
5253
+ const spinnerColorClass = spinnerVariants[variant];
5254
+ const baseSpinnerClasses = cn(
5255
+ "eui-spinner",
5256
+ "inline-flex shrink-0 items-center justify-center",
5257
+ spinnerSizes[size],
5258
+ spinnerColorClass,
5259
+ spinnerClassName
5260
+ );
5261
+ const labelClasses = cn(
5262
+ "eui-spinner-label",
5263
+ "font-medium",
5264
+ spinnerTextSizes[size],
5265
+ spinnerColorClass,
5266
+ labelClassName
5267
+ );
5268
+ const contentLayoutClasses = cn(
5269
+ "eui-spinner-wrapper",
5270
+ "inline-flex items-center justify-center",
5271
+ direction === "vertical" ? "flex-col gap-3" : "flex-row gap-3",
5272
+ spinnerColorClass
5273
+ );
5274
+ const wrapperClasses = cn(
5275
+ contentLayoutClasses,
5276
+ centered && !fullscreen && !overlay && "w-full py-6",
5277
+ fullscreen && !backdrop && "fixed inset-0 z-50",
5278
+ overlay && "absolute inset-0 z-40",
5279
+ overlay && (backdrop ? "bg-white/70 backdrop-blur-sm dark:bg-black/60" : "bg-transparent"),
5280
+ className
5281
+ );
5282
+ const renderSpinner = () => {
5283
+ switch (type) {
5284
+ case "ring":
5285
+ return /* @__PURE__ */ jsxRuntime.jsx(
5286
+ "span",
5287
+ {
5288
+ className: cn(
5289
+ baseSpinnerClasses,
5290
+ "eui-spinner-ring rounded-full",
5291
+ spinnerStrokeSizes[size]
5292
+ )
5293
+ }
5294
+ );
5295
+ case "dots":
5296
+ return /* @__PURE__ */ jsxRuntime.jsx(
5297
+ "span",
5298
+ {
5299
+ className: cn(
5300
+ baseSpinnerClasses,
5301
+ "gap-1",
5302
+ size === "xl" && "gap-2"
5303
+ ),
5304
+ children: Array.from({ length: SPINNER_DOT_COUNT }).map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
5305
+ "span",
5306
+ {
5307
+ className: cn(
5308
+ "eui-spinner-dot rounded-full bg-current",
5309
+ spinnerDotSizes[size]
5310
+ )
5311
+ },
5312
+ index
5313
+ ))
5314
+ }
5315
+ );
5316
+ case "bars":
5317
+ return /* @__PURE__ */ jsxRuntime.jsx(
5318
+ "span",
5319
+ {
5320
+ className: cn(
5321
+ baseSpinnerClasses,
5322
+ "gap-1",
5323
+ size === "xl" && "gap-1.5"
5324
+ ),
5325
+ children: Array.from({ length: SPINNER_BAR_COUNT }).map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
5326
+ "span",
5327
+ {
5328
+ className: cn(
5329
+ "eui-spinner-bar rounded-full bg-current",
5330
+ spinnerBarSizes[size]
5331
+ )
5332
+ },
5333
+ index
5334
+ ))
5335
+ }
5336
+ );
5337
+ case "pulse":
5338
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn(baseSpinnerClasses, "eui-spinner-pulse") });
5339
+ case "orbit":
5340
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn(baseSpinnerClasses, "eui-spinner-orbit") });
5341
+ case "dualRing":
5342
+ return /* @__PURE__ */ jsxRuntime.jsx(
5343
+ "span",
5344
+ {
5345
+ className: cn(
5346
+ baseSpinnerClasses,
5347
+ "eui-spinner-dual-ring rounded-full"
5348
+ )
5349
+ }
5350
+ );
5351
+ case "ripple":
5352
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn(baseSpinnerClasses, "eui-spinner-ripple") });
5353
+ case "grid":
5354
+ return /* @__PURE__ */ jsxRuntime.jsx(
5355
+ "span",
5356
+ {
5357
+ className: cn(
5358
+ baseSpinnerClasses,
5359
+ "grid grid-cols-3",
5360
+ size === "xs" || size === "sm" ? "gap-0.5" : "gap-1"
5361
+ ),
5362
+ children: Array.from({ length: SPINNER_GRID_COUNT }).map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
5363
+ "span",
5364
+ {
5365
+ className: cn("eui-spinner-grid-dot", gridDotSizes[size])
5366
+ },
5367
+ index
5368
+ ))
5369
+ }
5370
+ );
5371
+ case "wave":
5372
+ return /* @__PURE__ */ jsxRuntime.jsx(
5373
+ "span",
5374
+ {
5375
+ className: cn(
5376
+ baseSpinnerClasses,
5377
+ "gap-1",
5378
+ size === "xl" && "gap-1.5"
5379
+ ),
5380
+ children: Array.from({ length: SPINNER_WAVE_COUNT }).map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
5381
+ "span",
5382
+ {
5383
+ className: cn("eui-spinner-wave-item", waveItemSizes[size])
5384
+ },
5385
+ index
5386
+ ))
5387
+ }
5388
+ );
5389
+ case "border":
5390
+ default:
5391
+ return /* @__PURE__ */ jsxRuntime.jsx(
5392
+ "span",
5393
+ {
5394
+ className: cn(
5395
+ baseSpinnerClasses,
5396
+ "eui-spinner-border rounded-full",
5397
+ spinnerStrokeSizes[size],
5398
+ spinnerTrackVariants[variant]
5399
+ )
5400
+ }
5401
+ );
5402
+ }
5403
+ };
5404
+ const spinnerContent = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5405
+ renderSpinner(),
5406
+ hasVisibleLabel && /* @__PURE__ */ jsxRuntime.jsx("span", { className: labelClasses, children: label }),
5407
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: ariaLabel })
5408
+ ] });
5409
+ if (fullscreen && backdrop) {
5410
+ return /* @__PURE__ */ jsxRuntime.jsx(Backdrop_default, { styles: cn("text-white", className), children: /* @__PURE__ */ jsxRuntime.jsx(
5411
+ "div",
5412
+ {
5413
+ ...rest,
5414
+ role: "status",
5415
+ "aria-live": "polite",
5416
+ "aria-label": ariaLabel,
5417
+ className: contentLayoutClasses,
5418
+ children: spinnerContent
5419
+ }
5420
+ ) });
5421
+ }
5422
+ return /* @__PURE__ */ jsxRuntime.jsx(
5423
+ "div",
5424
+ {
5425
+ ...rest,
5426
+ role: "status",
5427
+ "aria-live": "polite",
5428
+ "aria-label": ariaLabel,
5429
+ className: wrapperClasses,
5430
+ children: spinnerContent
5431
+ }
5432
+ );
5433
+ }
5434
+ var Spinner_default = Spinner;
5042
5435
  function Table({
5043
5436
  title,
5044
5437
  columns,
@@ -5351,19 +5744,6 @@ var Form = ({
5351
5744
  }
5352
5745
  );
5353
5746
  };
5354
- var Backdrop = ({ children, styles }) => {
5355
- return /* @__PURE__ */ jsxRuntime.jsx(
5356
- "div",
5357
- {
5358
- className: classNames16__default.default({
5359
- "bg-black/75 top-0 bottom-0 left-0 right-0 z-50 fixed inset-0 flex items-center justify-center overflow-hidden": true,
5360
- [`${styles}`]: styles
5361
- }),
5362
- children
5363
- }
5364
- );
5365
- };
5366
- var Backdrop_default = Backdrop;
5367
5747
  var Skeleton = ({ children, className, ...rest }) => {
5368
5748
  return /* @__PURE__ */ jsxRuntime.jsx(
5369
5749
  "div",
@@ -5620,7 +6000,7 @@ var ShapeSwitch = () => {
5620
6000
  {
5621
6001
  value: currentShape,
5622
6002
  onChange: handleChange,
5623
- className: "\r\n px-3 py-2 rounded-md border border-gray-300\r\n bg-white dark:bg-gray-800\r\n text-sm shadow-sm\r\n focus:outline-none\r\n ",
6003
+ className: "\n px-3 py-2 rounded-md border border-gray-300\n bg-white dark:bg-gray-800\n text-sm shadow-sm\n focus:outline-none\n ",
5624
6004
  children: Object.keys(Shape).map((shape) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: shape, children: shape }, shape))
5625
6005
  }
5626
6006
  ) });
@@ -18614,7 +18994,7 @@ function MarkdownTOC({ title = "Table of Contents" }) {
18614
18994
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(
18615
18995
  "h2",
18616
18996
  {
18617
- className: "\r\n text-sm\r\n font-semibold\r\n uppercase\r\n tracking-wide\r\n text-gray-900\r\n dark:text-gray-100\r\n ",
18997
+ className: "\n text-sm\n font-semibold\n uppercase\n tracking-wide\n text-gray-900\n dark:text-gray-100\n ",
18618
18998
  children: title
18619
18999
  }
18620
19000
  ) }),
@@ -19944,7 +20324,7 @@ var GlowWrapper = ({
19944
20324
  /* @__PURE__ */ jsxRuntime.jsx(
19945
20325
  "span",
19946
20326
  {
19947
- className: "\r\n pointer-events-none absolute inset-0 opacity-0 \r\n group-hover:opacity-100 transition-opacity duration-300\r\n ",
20327
+ className: "\n pointer-events-none absolute inset-0 opacity-0 \n group-hover:opacity-100 transition-opacity duration-300\n ",
19948
20328
  style: { background: "var(--glow-bg)" }
19949
20329
  }
19950
20330
  ),
@@ -21646,6 +22026,7 @@ exports.CloudinaryProvider = CloudinaryProvider;
21646
22026
  exports.CloudinaryVideo = CloudinaryVideo_default;
21647
22027
  exports.Code = Code;
21648
22028
  exports.CommentThread = CommentThread_default;
22029
+ exports.ConfigBootstrap = ConfigBootstrap_default;
21649
22030
  exports.Configurator = Configurator;
21650
22031
  exports.ConfiguratorError = ConfiguratorError;
21651
22032
  exports.Content = Content;
@@ -21661,6 +22042,7 @@ exports.Drawer = Drawer;
21661
22042
  exports.DrawerToggler = DrawerToggler_default;
21662
22043
  exports.EUIDevLayout = EUIDevLayout_default;
21663
22044
  exports.EUIProvider = EUIProvider;
22045
+ exports.EnvErrorScreen = EnvErrorScreen_default;
21664
22046
  exports.Flag = Flag;
21665
22047
  exports.Flex = Flex;
21666
22048
  exports.FlexCol = FlexCol_default;
@@ -21769,6 +22151,7 @@ exports.SidebarLayout = SidebarLayout_default;
21769
22151
  exports.SidemenuLayout = SidemenuLayout_default;
21770
22152
  exports.Skeleton = Skeleton;
21771
22153
  exports.Slider = Slider_default;
22154
+ exports.Spinner = Spinner_default;
21772
22155
  exports.StarRating = StarRating_default;
21773
22156
  exports.StarRatingDistribution = StarRatingDistribution_default;
21774
22157
  exports.StarRatingInput = StarRatingInput_default;