@adamosuiteservices/ui 2.10.13 → 2.11.13
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/calendar-Bapd0vmU.js +2949 -0
- package/dist/calendar-DMvGcwMp.cjs +76 -0
- package/dist/calendar.cjs +1 -76
- package/dist/calendar.js +3 -2945
- package/dist/combobox-CW07jN3o.cjs +37 -0
- package/dist/combobox-CtdzWxGX.js +598 -0
- package/dist/combobox.cjs +1 -37
- package/dist/combobox.js +2 -596
- package/dist/components/layout/full-screen-loader/full-screen-loader-manager.d.ts +6 -0
- package/dist/components/layout/full-screen-loader/full-screen-loader-observable.d.ts +8 -0
- package/dist/components/layout/full-screen-loader/full-screen-loader.d.ts +4 -0
- package/dist/components/layout/full-screen-loader/index.d.ts +3 -0
- package/dist/components/ui/date-picker-selector/date-picker-selector.d.ts +21 -0
- package/dist/components/ui/date-picker-selector/index.d.ts +1 -0
- package/dist/date-picker-selector.cjs +1 -0
- package/dist/date-picker-selector.js +105 -0
- package/dist/full-screen-loader.cjs +4 -0
- package/dist/full-screen-loader.js +50 -0
- package/dist/spinner-B-sC3DVC.cjs +1 -0
- package/dist/spinner-DvrliN2E.js +19 -0
- package/dist/spinner.cjs +1 -1
- package/dist/spinner.js +1 -16
- package/dist/styles.css +1 -1
- package/dist/themes.css +1 -1
- package/docs/components/layout/full-screen-loader.md +500 -0
- package/docs/components/ui/date-picker-selector.md +376 -0
- package/package.json +9 -1
package/dist/themes.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[data-theme=default]{--background: var(--neutrals-0);--foreground: var(--neutrals-700);--card: var(--neutrals-0);--card-foreground: var(--neutrals-700);--popover: var(--neutrals-0);--popover-foreground: var(--neutrals-700);--primary: var(--default);--primary-foreground: var(--neutrals-0);--secondary: var(--default-100);--secondary-foreground: var(--default-700);--muted: var(--neutrals-100);--muted-foreground: var(--neutrals-500);--accent: var(--neutrals-100);--accent-foreground: var(--neutrals-800);--destructive: var(--error);--destructive-foreground: var(--neutrals-0);--border: var(--neutrals-200);--input: var(--neutrals-200);--ring: var(--default);--chart-1: var(--default-500);--chart-2: var(--default-400);--chart-3: var(--default-300);--chart-4: var(--default-200);--chart-5: var(--default-100);--sidebar: var(--neutrals-0);--sidebar-foreground: var(--neutrals-700);--sidebar-primary: var(--default);--sidebar-primary-foreground: var(--neutrals-0);--sidebar-accent: var(--neutrals-100);--sidebar-accent-foreground: var(--neutrals-800);--sidebar-border: var(--neutrals-200);--sidebar-ring: var(--default);--primary-25: var(--default-25);--primary-50: var(--default-50);--primary-100: var(--default-100);--primary-200: var(--default-200);--primary-300: var(--default-300);--primary-400: var(--default-400);--primary-500: var(--default-500);--primary-600: var(--default-600);--primary-700: var(--default-700);--primary-800: var(--default-800);--primary-900: var(--default-900)}[data-theme=default].dark{--background: var(--neutrals-900);--foreground: var(--neutrals-0);--card: var(--neutrals-800);--card-foreground: var(--neutrals-0);--popover: var(--neutrals-800);--popover-foreground: var(--neutrals-0);--primary: var(--default);--primary-foreground: var(--neutrals-900);--secondary: var(--default-100);--secondary-foreground: var(--default-700);--muted: var(--neutrals-800);--muted-foreground: var(--neutrals-400);--accent: var(--neutrals-800);--accent-foreground: var(--neutrals-0);--destructive: var(--error);--destructive-foreground: var(--neutrals-0);--border: var(--neutrals-0) / 10%;--input: var(--neutrals-0) / 15%;--ring: var(--default);--chart-1: var(--default-500);--chart-2: var(--default-400);--chart-3: var(--default-300);--chart-4: var(--default-200);--chart-5: var(--default-100);--sidebar: var(--neutrals-900);--sidebar-foreground: var(--neutrals-0);--sidebar-primary: var(--default);--sidebar-primary-foreground: var(--neutrals-0);--sidebar-accent: var(--neutrals-800);--sidebar-accent-foreground: var(--neutrals-0);--sidebar-border: var(--neutrals-0) / 10%;--sidebar-ring: var(--default)}[data-theme=sign]{--background: var(--neutrals-0);--foreground: var(--neutrals-700);--card: var(--neutrals-0);--card-foreground: var(--neutrals-700);--popover: var(--neutrals-0);--popover-foreground: var(--neutrals-700);--primary: var(--sign);--primary-foreground: var(--neutrals-0);--secondary: var(--sign-100);--secondary-foreground: var(--sign-700);--muted: var(--neutrals-100);--muted-foreground: var(--neutrals-500);--accent: var(--neutrals-100);--accent-foreground: var(--neutrals-800);--destructive: var(--error);--destructive-foreground: var(--neutrals-0);--border: var(--neutrals-200);--input: var(--neutrals-200);--ring: var(--sign);--chart-1: var(--sign-500);--chart-2: var(--sign-400);--chart-3: var(--sign-300);--chart-4: var(--sign-200);--chart-5: var(--sign-100);--sidebar: var(--neutrals-0);--sidebar-foreground: var(--neutrals-700);--sidebar-primary: var(--sign);--sidebar-primary-foreground: var(--neutrals-0);--sidebar-accent: var(--neutrals-100);--sidebar-accent-foreground: var(--neutrals-800);--sidebar-border: var(--neutrals-200);--sidebar-ring: var(--sign);--primary-25: var(--sign-25);--primary-50: var(--sign-50);--primary-100: var(--sign-100);--primary-200: var(--sign-200);--primary-300: var(--sign-300);--primary-400: var(--sign-400);--primary-500: var(--sign-500);--primary-600: var(--sign-600);--primary-700: var(--sign-700);--primary-800: var(--sign-800);--primary-900: var(--sign-900)}[data-theme=sign].dark{--background: var(--neutrals-900);--foreground: var(--neutrals-0);--card: var(--neutrals-800);--card-foreground: var(--neutrals-0);--popover: var(--neutrals-800);--popover-foreground: var(--neutrals-0);--primary: var(--sign);--primary-foreground: var(--neutrals-900);--secondary: var(--sign-100);--secondary-foreground: var(--sign-700);--muted: var(--neutrals-800);--muted-foreground: var(--neutrals-400);--accent: var(--neutrals-800);--accent-foreground: var(--neutrals-0);--destructive: var(--error);--destructive-foreground: var(--neutrals-0);--border: var(--neutrals-0) / 10%;--input: var(--neutrals-0) / 15%;--ring: var(--sign);--chart-1: var(--sign-500);--chart-2: var(--sign-400);--chart-3: var(--sign-300);--chart-4: var(--sign-200);--chart-5: var(--sign-100);--sidebar: var(--neutrals-900);--sidebar-foreground: var(--neutrals-0);--sidebar-primary: var(--sign);--sidebar-primary-foreground: var(--neutrals-0);--sidebar-accent: var(--neutrals-800);--sidebar-accent-foreground: var(--neutrals-0);--sidebar-border: var(--neutrals-0) / 10%;--sidebar-ring: var(--sign)}[data-theme=id]{--background: var(--neutrals-0);--foreground: var(--neutrals-700);--card: var(--neutrals-0);--card-foreground: var(--neutrals-700);--popover: var(--neutrals-0);--popover-foreground: var(--neutrals-700);--primary: var(--id);--primary-foreground: var(--neutrals-0);--secondary: var(--id-100);--secondary-foreground: var(--id-700);--muted: var(--neutrals-100);--muted-foreground: var(--neutrals-500);--accent: var(--neutrals-100);--accent-foreground: var(--neutrals-800);--destructive: var(--error);--destructive-foreground: var(--neutrals-0);--border: var(--neutrals-200);--input: var(--neutrals-200);--ring: var(--id);--chart-1: var(--id-500);--chart-2: var(--id-400);--chart-3: var(--id-300);--chart-4: var(--id-200);--chart-5: var(--id-100);--sidebar: var(--neutrals-0);--sidebar-foreground: var(--neutrals-700);--sidebar-primary: var(--id);--sidebar-primary-foreground: var(--neutrals-0);--sidebar-accent: var(--neutrals-100);--sidebar-accent-foreground: var(--neutrals-800);--sidebar-border: var(--neutrals-200);--sidebar-ring: var(--id-500);--primary-25: var(--id-25);--primary-50: var(--id-50);--primary-100: var(--id-100);--primary-200: var(--id-200);--primary-300: var(--id-300);--primary-400: var(--id-400);--primary-500: var(--id-500);--primary-600: var(--id-600);--primary-700: var(--id-700);--primary-800: var(--id-800);--primary-900: var(--id-900)}[data-theme=id].dark{--background: var(--neutrals-900);--foreground: var(--neutrals-0);--card: var(--neutrals-800);--card-foreground: var(--neutrals-0);--popover: var(--neutrals-800);--popover-foreground: var(--neutrals-0);--primary: var(--id);--primary-foreground: var(--neutrals-900);--secondary: var(--id-100);--secondary-foreground: var(--id-700);--muted: var(--neutrals-800);--muted-foreground: var(--neutrals-400);--accent: var(--neutrals-800);--accent-foreground: var(--neutrals-0);--destructive: var(--error);--destructive-foreground: var(--neutrals-0);--border: var(--neutrals-0) / 10%;--input: var(--neutrals-0) / 15%;--ring: var(--id);--chart-1: var(--id-500);--chart-2: var(--id-400);--chart-3: var(--id-300);--chart-4: var(--id-200);--chart-5: var(--id-100);--sidebar: var(--neutrals-900);--sidebar-foreground: var(--neutrals-0);--sidebar-primary: var(--id);--sidebar-primary-foreground: var(--neutrals-0);--sidebar-accent: var(--neutrals-800);--sidebar-accent-foreground: var(--neutrals-0);--sidebar-border: var(--neutrals-0) / 10%;--sidebar-ring: var(--id)}[data-theme=pay]{--background: var(--neutrals-0);--foreground: var(--neutrals-700);--card: var(--neutrals-0);--card-foreground: var(--neutrals-700);--popover: var(--neutrals-0);--popover-foreground: var(--neutrals-700);--primary: var(--pay);--primary-foreground: var(--neutrals-0);--secondary: var(--pay-100);--secondary-foreground: var(--pay-700);--muted: var(--neutrals-100);--muted-foreground: var(--neutrals-500);--accent: var(--neutrals-100);--accent-foreground: var(--neutrals-800);--destructive: var(--error);--destructive-foreground: var(--neutrals-0);--border: var(--neutrals-200);--input: var(--neutrals-200);--ring: var(--pay);--chart-1: var(--pay-500);--chart-2: var(--pay-400);--chart-3: var(--pay-300);--chart-4: var(--pay-200);--chart-5: var(--pay-100);--sidebar: var(--neutrals-0);--sidebar-foreground: var(--neutrals-700);--sidebar-primary: var(--pay);--sidebar-primary-foreground: var(--neutrals-0);--sidebar-accent: var(--neutrals-100);--sidebar-accent-foreground: var(--neutrals-800);--sidebar-border: var(--neutrals-200);--sidebar-ring: var(--pay);--primary-25: var(--pay-25);--primary-50: var(--pay-50);--primary-100: var(--pay-100);--primary-200: var(--pay-200);--primary-300: var(--pay-300);--primary-400: var(--pay-400);--primary-500: var(--pay-500);--primary-600: var(--pay-600);--primary-700: var(--pay-700);--primary-800: var(--pay-800);--primary-900: var(--pay-900)}[data-theme=pay].dark{--background: var(--neutrals-900);--foreground: var(--neutrals-0);--card: var(--neutrals-800);--card-foreground: var(--neutrals-0);--popover: var(--neutrals-800);--popover-foreground: var(--neutrals-0);--primary: var(--pay);--primary-foreground: var(--neutrals-900);--secondary: var(--pay-100);--secondary-foreground: var(--pay-700);--muted: var(--neutrals-800);--muted-foreground: var(--neutrals-400);--accent: var(--neutrals-800);--accent-foreground: var(--neutrals-0);--destructive: var(--error);--destructive-foreground: var(--neutrals-0);--border: var(--neutrals-0) / 10%;--input: var(--neutrals-0) / 15%;--ring: var(--pay);--chart-1: var(--pay-500);--chart-2: var(--pay-400);--chart-3: var(--pay-300);--chart-4: var(--pay-200);--chart-5: var(--pay-100);--sidebar: var(--neutrals-900);--sidebar-foreground: var(--neutrals-0);--sidebar-primary: var(--pay);--sidebar-primary-foreground: var(--neutrals-0);--sidebar-accent: var(--neutrals-800);--sidebar-accent-foreground: var(--neutrals-0);--sidebar-border: var(--neutrals-0) / 10%;--sidebar-ring: var(--pay)}[data-theme=risk]{--background: var(--neutrals-0);--foreground: var(--neutrals-700);--card: var(--neutrals-0);--card-foreground: var(--neutrals-700);--popover: var(--neutrals-0);--popover-foreground: var(--neutrals-700);--primary: var(--risk);--primary-foreground: var(--neutrals-0);--secondary: var(--risk-100);--secondary-foreground: var(--risk-700);--muted: var(--neutrals-100);--muted-foreground: var(--neutrals-500);--accent: var(--neutrals-100);--accent-foreground: var(--neutrals-800);--destructive: var(--error);--destructive-foreground: var(--neutrals-0);--border: var(--neutrals-200);--input: var(--neutrals-200);--ring: var(--risk);--chart-1: var(--risk-500);--chart-2: var(--risk-400);--chart-3: var(--risk-300);--chart-4: var(--risk-200);--chart-5: var(--risk-100);--sidebar: var(--neutrals-0);--sidebar-foreground: var(--neutrals-700);--sidebar-primary: var(--risk);--sidebar-primary-foreground: var(--neutrals-0);--sidebar-accent: var(--neutrals-100);--sidebar-accent-foreground: var(--neutrals-800);--sidebar-border: var(--neutrals-200);--sidebar-ring: var(--risk);--primary-25: var(--risk-25);--primary-50: var(--risk-50);--primary-100: var(--risk-100);--primary-200: var(--risk-200);--primary-300: var(--risk-300);--primary-400: var(--risk-400);--primary-500: var(--risk-500);--primary-600: var(--risk-600);--primary-700: var(--risk-700);--primary-800: var(--risk-800);--primary-900: var(--risk-900)}[data-theme=risk].dark{--background: var(--neutrals-900);--foreground: var(--neutrals-0);--card: var(--neutrals-800);--card-foreground: var(--neutrals-0);--popover: var(--neutrals-800);--popover-foreground: var(--neutrals-0);--primary: var(--risk);--primary-foreground: var(--neutrals-900);--secondary: var(--risk-100);--secondary-foreground: var(--risk-700);--muted: var(--neutrals-800);--muted-foreground: var(--neutrals-400);--accent: var(--neutrals-800);--accent-foreground: var(--neutrals-0);--destructive: var(--error);--destructive-foreground: var(--neutrals-0);--border: var(--neutrals-0) / 10%;--input: var(--neutrals-0) / 15%;--ring: var(--risk);--chart-1: var(--risk-500);--chart-2: var(--risk-400);--chart-3: var(--risk-300);--chart-4: var(--risk-200);--chart-5: var(--risk-100);--sidebar: var(--neutrals-900);--sidebar-foreground: var(--neutrals-0);--sidebar-primary: var(--risk);--sidebar-primary-foreground: var(--neutrals-0);--sidebar-accent: var(--neutrals-800);--sidebar-accent-foreground: var(--neutrals-0);--sidebar-border: var(--neutrals-0) / 10%;--sidebar-ring: var(--risk)}[data-theme=check]{--background: var(--neutrals-0);--foreground: var(--neutrals-700);--card: var(--neutrals-0);--card-foreground: var(--neutrals-700);--popover: var(--neutrals-0);--popover-foreground: var(--neutrals-700);--primary: var(--check);--primary-foreground: var(--neutrals-0);--secondary: var(--check-100);--secondary-foreground: var(--check-700);--muted: var(--neutrals-100);--muted-foreground: var(--neutrals-500);--accent: var(--neutrals-100);--accent-foreground: var(--neutrals-800);--destructive: var(--error);--destructive-foreground: var(--neutrals-0);--border: var(--neutrals-200);--input: var(--neutrals-200);--ring: var(--check);--chart-1: var(--check-500);--chart-2: var(--check-400);--chart-3: var(--check-300);--chart-4: var(--check-200);--chart-5: var(--check-100);--sidebar: var(--neutrals-0);--sidebar-foreground: var(--neutrals-700);--sidebar-primary: var(--check);--sidebar-primary-foreground: var(--neutrals-0);--sidebar-accent: var(--neutrals-100);--sidebar-accent-foreground: var(--neutrals-800);--sidebar-border: var(--neutrals-200);--sidebar-ring: var(--check);--primary-25: var(--check-25);--primary-50: var(--check-50);--primary-100: var(--check-100);--primary-200: var(--check-200);--primary-300: var(--check-300);--primary-400: var(--check-400);--primary-500: var(--check-500);--primary-600: var(--check-600);--primary-700: var(--check-700);--primary-800: var(--check-800);--primary-900: var(--check-900)}[data-theme=check].dark{--background: var(--neutrals-900);--foreground: var(--neutrals-0);--card: var(--neutrals-800);--card-foreground: var(--neutrals-0);--popover: var(--neutrals-800);--popover-foreground: var(--neutrals-0);--primary: var(--check);--primary-foreground: var(--neutrals-900);--secondary: var(--check-100);--secondary-foreground: var(--check-700);--muted: var(--neutrals-800);--muted-foreground: var(--neutrals-400);--accent: var(--neutrals-800);--accent-foreground: var(--neutrals-0);--destructive: var(--error);--destructive-foreground: var(--neutrals-0);--border: var(--neutrals-0) / 10%;--input: var(--neutrals-0) / 15%;--ring: var(--check);--chart-1: var(--check-500);--chart-2: var(--check-400);--chart-3: var(--check-300);--chart-4: var(--check-200);--chart-5: var(--check-100);--sidebar: var(--neutrals-900);--sidebar-foreground: var(--neutrals-0);--sidebar-primary: var(--check);--sidebar-primary-foreground: var(--neutrals-0);--sidebar-accent: var(--neutrals-800);--sidebar-accent-foreground: var(--neutrals-0);--sidebar-border: var(--neutrals-0) / 10%;--sidebar-ring: var(--check)}
|
|
1
|
+
[data-theme=default]{--background: var(--neutrals-0);--foreground: var(--neutrals-700);--card: var(--neutrals-0);--card-foreground: var(--neutrals-700);--popover: var(--neutrals-0);--popover-foreground: var(--neutrals-700);--primary: var(--default);--primary-foreground: var(--neutrals-0);--secondary: var(--default-100);--secondary-foreground: var(--default-700);--muted: var(--neutrals-100);--muted-foreground: var(--neutrals-500);--accent: var(--neutrals-100);--accent-foreground: var(--neutrals-800);--destructive: var(--error);--destructive-foreground: var(--neutrals-0);--border: var(--neutrals-200);--input: var(--neutrals-400);--ring: var(--default);--chart-1: var(--default-500);--chart-2: var(--default-400);--chart-3: var(--default-300);--chart-4: var(--default-200);--chart-5: var(--default-100);--sidebar: var(--neutrals-0);--sidebar-foreground: var(--neutrals-700);--sidebar-primary: var(--default);--sidebar-primary-foreground: var(--neutrals-0);--sidebar-accent: var(--neutrals-100);--sidebar-accent-foreground: var(--neutrals-800);--sidebar-border: var(--neutrals-200);--sidebar-ring: var(--default);--primary-25: var(--default-25);--primary-50: var(--default-50);--primary-100: var(--default-100);--primary-200: var(--default-200);--primary-300: var(--default-300);--primary-400: var(--default-400);--primary-500: var(--default-500);--primary-600: var(--default-600);--primary-700: var(--default-700);--primary-800: var(--default-800);--primary-900: var(--default-900)}[data-theme=default].dark{--background: var(--neutrals-900);--foreground: var(--neutrals-0);--card: var(--neutrals-800);--card-foreground: var(--neutrals-0);--popover: var(--neutrals-800);--popover-foreground: var(--neutrals-0);--primary: var(--default);--primary-foreground: var(--neutrals-900);--secondary: var(--default-100);--secondary-foreground: var(--default-700);--muted: var(--neutrals-800);--muted-foreground: var(--neutrals-400);--accent: var(--neutrals-800);--accent-foreground: var(--neutrals-0);--destructive: var(--error);--destructive-foreground: var(--neutrals-0);--border: var(--neutrals-0) / 10%;--input: var(--neutrals-0) / 15%;--ring: var(--default);--chart-1: var(--default-500);--chart-2: var(--default-400);--chart-3: var(--default-300);--chart-4: var(--default-200);--chart-5: var(--default-100);--sidebar: var(--neutrals-900);--sidebar-foreground: var(--neutrals-0);--sidebar-primary: var(--default);--sidebar-primary-foreground: var(--neutrals-0);--sidebar-accent: var(--neutrals-800);--sidebar-accent-foreground: var(--neutrals-0);--sidebar-border: var(--neutrals-0) / 10%;--sidebar-ring: var(--default)}[data-theme=sign]{--background: var(--neutrals-0);--foreground: var(--neutrals-700);--card: var(--neutrals-0);--card-foreground: var(--neutrals-700);--popover: var(--neutrals-0);--popover-foreground: var(--neutrals-700);--primary: var(--sign);--primary-foreground: var(--neutrals-0);--secondary: var(--sign-100);--secondary-foreground: var(--sign-700);--muted: var(--neutrals-100);--muted-foreground: var(--neutrals-500);--accent: var(--neutrals-100);--accent-foreground: var(--neutrals-800);--destructive: var(--error);--destructive-foreground: var(--neutrals-0);--border: var(--neutrals-200);--input: var(--neutrals-400);--ring: var(--sign);--chart-1: var(--sign-500);--chart-2: var(--sign-400);--chart-3: var(--sign-300);--chart-4: var(--sign-200);--chart-5: var(--sign-100);--sidebar: var(--neutrals-0);--sidebar-foreground: var(--neutrals-700);--sidebar-primary: var(--sign);--sidebar-primary-foreground: var(--neutrals-0);--sidebar-accent: var(--neutrals-100);--sidebar-accent-foreground: var(--neutrals-800);--sidebar-border: var(--neutrals-200);--sidebar-ring: var(--sign);--primary-25: var(--sign-25);--primary-50: var(--sign-50);--primary-100: var(--sign-100);--primary-200: var(--sign-200);--primary-300: var(--sign-300);--primary-400: var(--sign-400);--primary-500: var(--sign-500);--primary-600: var(--sign-600);--primary-700: var(--sign-700);--primary-800: var(--sign-800);--primary-900: var(--sign-900)}[data-theme=sign].dark{--background: var(--neutrals-900);--foreground: var(--neutrals-0);--card: var(--neutrals-800);--card-foreground: var(--neutrals-0);--popover: var(--neutrals-800);--popover-foreground: var(--neutrals-0);--primary: var(--sign);--primary-foreground: var(--neutrals-900);--secondary: var(--sign-100);--secondary-foreground: var(--sign-700);--muted: var(--neutrals-800);--muted-foreground: var(--neutrals-400);--accent: var(--neutrals-800);--accent-foreground: var(--neutrals-0);--destructive: var(--error);--destructive-foreground: var(--neutrals-0);--border: var(--neutrals-0) / 10%;--input: var(--neutrals-0) / 15%;--ring: var(--sign);--chart-1: var(--sign-500);--chart-2: var(--sign-400);--chart-3: var(--sign-300);--chart-4: var(--sign-200);--chart-5: var(--sign-100);--sidebar: var(--neutrals-900);--sidebar-foreground: var(--neutrals-0);--sidebar-primary: var(--sign);--sidebar-primary-foreground: var(--neutrals-0);--sidebar-accent: var(--neutrals-800);--sidebar-accent-foreground: var(--neutrals-0);--sidebar-border: var(--neutrals-0) / 10%;--sidebar-ring: var(--sign)}[data-theme=id]{--background: var(--neutrals-0);--foreground: var(--neutrals-700);--card: var(--neutrals-0);--card-foreground: var(--neutrals-700);--popover: var(--neutrals-0);--popover-foreground: var(--neutrals-700);--primary: var(--id);--primary-foreground: var(--neutrals-0);--secondary: var(--id-100);--secondary-foreground: var(--id-700);--muted: var(--neutrals-100);--muted-foreground: var(--neutrals-500);--accent: var(--neutrals-100);--accent-foreground: var(--neutrals-800);--destructive: var(--error);--destructive-foreground: var(--neutrals-0);--border: var(--neutrals-200);--input: var(--neutrals-400);--ring: var(--id);--chart-1: var(--id-500);--chart-2: var(--id-400);--chart-3: var(--id-300);--chart-4: var(--id-200);--chart-5: var(--id-100);--sidebar: var(--neutrals-0);--sidebar-foreground: var(--neutrals-700);--sidebar-primary: var(--id);--sidebar-primary-foreground: var(--neutrals-0);--sidebar-accent: var(--neutrals-100);--sidebar-accent-foreground: var(--neutrals-800);--sidebar-border: var(--neutrals-200);--sidebar-ring: var(--id-500);--primary-25: var(--id-25);--primary-50: var(--id-50);--primary-100: var(--id-100);--primary-200: var(--id-200);--primary-300: var(--id-300);--primary-400: var(--id-400);--primary-500: var(--id-500);--primary-600: var(--id-600);--primary-700: var(--id-700);--primary-800: var(--id-800);--primary-900: var(--id-900)}[data-theme=id].dark{--background: var(--neutrals-900);--foreground: var(--neutrals-0);--card: var(--neutrals-800);--card-foreground: var(--neutrals-0);--popover: var(--neutrals-800);--popover-foreground: var(--neutrals-0);--primary: var(--id);--primary-foreground: var(--neutrals-900);--secondary: var(--id-100);--secondary-foreground: var(--id-700);--muted: var(--neutrals-800);--muted-foreground: var(--neutrals-400);--accent: var(--neutrals-800);--accent-foreground: var(--neutrals-0);--destructive: var(--error);--destructive-foreground: var(--neutrals-0);--border: var(--neutrals-0) / 10%;--input: var(--neutrals-0) / 15%;--ring: var(--id);--chart-1: var(--id-500);--chart-2: var(--id-400);--chart-3: var(--id-300);--chart-4: var(--id-200);--chart-5: var(--id-100);--sidebar: var(--neutrals-900);--sidebar-foreground: var(--neutrals-0);--sidebar-primary: var(--id);--sidebar-primary-foreground: var(--neutrals-0);--sidebar-accent: var(--neutrals-800);--sidebar-accent-foreground: var(--neutrals-0);--sidebar-border: var(--neutrals-0) / 10%;--sidebar-ring: var(--id)}[data-theme=pay]{--background: var(--neutrals-0);--foreground: var(--neutrals-700);--card: var(--neutrals-0);--card-foreground: var(--neutrals-700);--popover: var(--neutrals-0);--popover-foreground: var(--neutrals-700);--primary: var(--pay);--primary-foreground: var(--neutrals-0);--secondary: var(--pay-100);--secondary-foreground: var(--pay-700);--muted: var(--neutrals-100);--muted-foreground: var(--neutrals-500);--accent: var(--neutrals-100);--accent-foreground: var(--neutrals-800);--destructive: var(--error);--destructive-foreground: var(--neutrals-0);--border: var(--neutrals-200);--input: var(--neutrals-400);--ring: var(--pay);--chart-1: var(--pay-500);--chart-2: var(--pay-400);--chart-3: var(--pay-300);--chart-4: var(--pay-200);--chart-5: var(--pay-100);--sidebar: var(--neutrals-0);--sidebar-foreground: var(--neutrals-700);--sidebar-primary: var(--pay);--sidebar-primary-foreground: var(--neutrals-0);--sidebar-accent: var(--neutrals-100);--sidebar-accent-foreground: var(--neutrals-800);--sidebar-border: var(--neutrals-200);--sidebar-ring: var(--pay);--primary-25: var(--pay-25);--primary-50: var(--pay-50);--primary-100: var(--pay-100);--primary-200: var(--pay-200);--primary-300: var(--pay-300);--primary-400: var(--pay-400);--primary-500: var(--pay-500);--primary-600: var(--pay-600);--primary-700: var(--pay-700);--primary-800: var(--pay-800);--primary-900: var(--pay-900)}[data-theme=pay].dark{--background: var(--neutrals-900);--foreground: var(--neutrals-0);--card: var(--neutrals-800);--card-foreground: var(--neutrals-0);--popover: var(--neutrals-800);--popover-foreground: var(--neutrals-0);--primary: var(--pay);--primary-foreground: var(--neutrals-900);--secondary: var(--pay-100);--secondary-foreground: var(--pay-700);--muted: var(--neutrals-800);--muted-foreground: var(--neutrals-400);--accent: var(--neutrals-800);--accent-foreground: var(--neutrals-0);--destructive: var(--error);--destructive-foreground: var(--neutrals-0);--border: var(--neutrals-0) / 10%;--input: var(--neutrals-0) / 15%;--ring: var(--pay);--chart-1: var(--pay-500);--chart-2: var(--pay-400);--chart-3: var(--pay-300);--chart-4: var(--pay-200);--chart-5: var(--pay-100);--sidebar: var(--neutrals-900);--sidebar-foreground: var(--neutrals-0);--sidebar-primary: var(--pay);--sidebar-primary-foreground: var(--neutrals-0);--sidebar-accent: var(--neutrals-800);--sidebar-accent-foreground: var(--neutrals-0);--sidebar-border: var(--neutrals-0) / 10%;--sidebar-ring: var(--pay)}[data-theme=risk]{--background: var(--neutrals-0);--foreground: var(--neutrals-700);--card: var(--neutrals-0);--card-foreground: var(--neutrals-700);--popover: var(--neutrals-0);--popover-foreground: var(--neutrals-700);--primary: var(--risk);--primary-foreground: var(--neutrals-0);--secondary: var(--risk-100);--secondary-foreground: var(--risk-700);--muted: var(--neutrals-100);--muted-foreground: var(--neutrals-500);--accent: var(--neutrals-100);--accent-foreground: var(--neutrals-800);--destructive: var(--error);--destructive-foreground: var(--neutrals-0);--border: var(--neutrals-200);--input: var(--neutrals-400);--ring: var(--risk);--chart-1: var(--risk-500);--chart-2: var(--risk-400);--chart-3: var(--risk-300);--chart-4: var(--risk-200);--chart-5: var(--risk-100);--sidebar: var(--neutrals-0);--sidebar-foreground: var(--neutrals-700);--sidebar-primary: var(--risk);--sidebar-primary-foreground: var(--neutrals-0);--sidebar-accent: var(--neutrals-100);--sidebar-accent-foreground: var(--neutrals-800);--sidebar-border: var(--neutrals-200);--sidebar-ring: var(--risk);--primary-25: var(--risk-25);--primary-50: var(--risk-50);--primary-100: var(--risk-100);--primary-200: var(--risk-200);--primary-300: var(--risk-300);--primary-400: var(--risk-400);--primary-500: var(--risk-500);--primary-600: var(--risk-600);--primary-700: var(--risk-700);--primary-800: var(--risk-800);--primary-900: var(--risk-900)}[data-theme=risk].dark{--background: var(--neutrals-900);--foreground: var(--neutrals-0);--card: var(--neutrals-800);--card-foreground: var(--neutrals-0);--popover: var(--neutrals-800);--popover-foreground: var(--neutrals-0);--primary: var(--risk);--primary-foreground: var(--neutrals-900);--secondary: var(--risk-100);--secondary-foreground: var(--risk-700);--muted: var(--neutrals-800);--muted-foreground: var(--neutrals-400);--accent: var(--neutrals-800);--accent-foreground: var(--neutrals-0);--destructive: var(--error);--destructive-foreground: var(--neutrals-0);--border: var(--neutrals-0) / 10%;--input: var(--neutrals-0) / 15%;--ring: var(--risk);--chart-1: var(--risk-500);--chart-2: var(--risk-400);--chart-3: var(--risk-300);--chart-4: var(--risk-200);--chart-5: var(--risk-100);--sidebar: var(--neutrals-900);--sidebar-foreground: var(--neutrals-0);--sidebar-primary: var(--risk);--sidebar-primary-foreground: var(--neutrals-0);--sidebar-accent: var(--neutrals-800);--sidebar-accent-foreground: var(--neutrals-0);--sidebar-border: var(--neutrals-0) / 10%;--sidebar-ring: var(--risk)}[data-theme=check]{--background: var(--neutrals-0);--foreground: var(--neutrals-700);--card: var(--neutrals-0);--card-foreground: var(--neutrals-700);--popover: var(--neutrals-0);--popover-foreground: var(--neutrals-700);--primary: var(--check);--primary-foreground: var(--neutrals-0);--secondary: var(--check-100);--secondary-foreground: var(--check-700);--muted: var(--neutrals-100);--muted-foreground: var(--neutrals-500);--accent: var(--neutrals-100);--accent-foreground: var(--neutrals-800);--destructive: var(--error);--destructive-foreground: var(--neutrals-0);--border: var(--neutrals-200);--input: var(--neutrals-400);--ring: var(--check);--chart-1: var(--check-500);--chart-2: var(--check-400);--chart-3: var(--check-300);--chart-4: var(--check-200);--chart-5: var(--check-100);--sidebar: var(--neutrals-0);--sidebar-foreground: var(--neutrals-700);--sidebar-primary: var(--check);--sidebar-primary-foreground: var(--neutrals-0);--sidebar-accent: var(--neutrals-100);--sidebar-accent-foreground: var(--neutrals-800);--sidebar-border: var(--neutrals-200);--sidebar-ring: var(--check);--primary-25: var(--check-25);--primary-50: var(--check-50);--primary-100: var(--check-100);--primary-200: var(--check-200);--primary-300: var(--check-300);--primary-400: var(--check-400);--primary-500: var(--check-500);--primary-600: var(--check-600);--primary-700: var(--check-700);--primary-800: var(--check-800);--primary-900: var(--check-900)}[data-theme=check].dark{--background: var(--neutrals-900);--foreground: var(--neutrals-0);--card: var(--neutrals-800);--card-foreground: var(--neutrals-0);--popover: var(--neutrals-800);--popover-foreground: var(--neutrals-0);--primary: var(--check);--primary-foreground: var(--neutrals-900);--secondary: var(--check-100);--secondary-foreground: var(--check-700);--muted: var(--neutrals-800);--muted-foreground: var(--neutrals-400);--accent: var(--neutrals-800);--accent-foreground: var(--neutrals-0);--destructive: var(--error);--destructive-foreground: var(--neutrals-0);--border: var(--neutrals-0) / 10%;--input: var(--neutrals-0) / 15%;--ring: var(--check);--chart-1: var(--check-500);--chart-2: var(--check-400);--chart-3: var(--check-300);--chart-4: var(--check-200);--chart-5: var(--check-100);--sidebar: var(--neutrals-900);--sidebar-foreground: var(--neutrals-0);--sidebar-primary: var(--check);--sidebar-primary-foreground: var(--neutrals-0);--sidebar-accent: var(--neutrals-800);--sidebar-accent-foreground: var(--neutrals-0);--sidebar-border: var(--neutrals-0) / 10%;--sidebar-ring: var(--check)}
|
|
@@ -0,0 +1,500 @@
|
|
|
1
|
+
# Full Screen Loader Component
|
|
2
|
+
|
|
3
|
+
## Descripción
|
|
4
|
+
|
|
5
|
+
Overlay de **carga a pantalla completa** que bloquea la interacción del usuario durante operaciones asíncronas. Incluye un spinner animado y un fondo semi-transparente con efecto de backdrop, ideal para indicar operaciones críticas o procesos de carga inicial.
|
|
6
|
+
|
|
7
|
+
## Características
|
|
8
|
+
|
|
9
|
+
- ✅ Overlay a pantalla completa con posicionamiento fijo
|
|
10
|
+
- ✅ Fondo semi-transparente (`bg-black/50`)
|
|
11
|
+
- ✅ Spinner animado en color primario
|
|
12
|
+
- ✅ Control programático con `show()` y `hide()`
|
|
13
|
+
- ✅ Patrón observable para sincronización global
|
|
14
|
+
- ✅ Portal rendering para z-index óptimo (`z-100`)
|
|
15
|
+
- ✅ Centrado automático del spinner
|
|
16
|
+
- ✅ Bloqueo de interacción durante carga
|
|
17
|
+
|
|
18
|
+
## Importación
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import {
|
|
22
|
+
FullScreenLoader,
|
|
23
|
+
FullScreenLoaderManager,
|
|
24
|
+
} from "@adamosuiteservices/ui/full-screen-loader";
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Setup Inicial
|
|
28
|
+
|
|
29
|
+
Agrega el componente `FullScreenLoader` en el nivel más alto de tu aplicación:
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
import { FullScreenLoader } from "@adamosuiteservices/ui/full-screen-loader";
|
|
33
|
+
|
|
34
|
+
function App() {
|
|
35
|
+
return (
|
|
36
|
+
<>
|
|
37
|
+
{/* Tu app aquí */}
|
|
38
|
+
<FullScreenLoader />
|
|
39
|
+
</>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**Importante**: Solo necesitas una instancia de `FullScreenLoader` en toda tu aplicación.
|
|
45
|
+
|
|
46
|
+
## Uso Básico
|
|
47
|
+
|
|
48
|
+
```tsx
|
|
49
|
+
import { FullScreenLoaderManager } from "@adamosuiteservices/ui/full-screen-loader";
|
|
50
|
+
import { Button } from "@adamosuiteservices/ui/button";
|
|
51
|
+
|
|
52
|
+
function MyComponent() {
|
|
53
|
+
const handleAsyncOperation = async () => {
|
|
54
|
+
// Mostrar loader
|
|
55
|
+
FullScreenLoaderManager.show();
|
|
56
|
+
|
|
57
|
+
try {
|
|
58
|
+
await someAsyncOperation();
|
|
59
|
+
} finally {
|
|
60
|
+
// Ocultar loader siempre, incluso si hay error
|
|
61
|
+
FullScreenLoaderManager.hide();
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
return <Button onClick={handleAsyncOperation}>Process Data</Button>;
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Patrones de Uso
|
|
70
|
+
|
|
71
|
+
### Operación Asíncrona Simple
|
|
72
|
+
|
|
73
|
+
```tsx
|
|
74
|
+
async function fetchData() {
|
|
75
|
+
FullScreenLoaderManager.show();
|
|
76
|
+
|
|
77
|
+
try {
|
|
78
|
+
const data = await api.getData();
|
|
79
|
+
return data;
|
|
80
|
+
} catch (error) {
|
|
81
|
+
console.error(error);
|
|
82
|
+
} finally {
|
|
83
|
+
FullScreenLoaderManager.hide();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Múltiples Operaciones en Secuencia
|
|
89
|
+
|
|
90
|
+
```tsx
|
|
91
|
+
async function processMultipleSteps() {
|
|
92
|
+
FullScreenLoaderManager.show();
|
|
93
|
+
|
|
94
|
+
try {
|
|
95
|
+
await step1();
|
|
96
|
+
await step2();
|
|
97
|
+
await step3();
|
|
98
|
+
} catch (error) {
|
|
99
|
+
console.error("Process failed:", error);
|
|
100
|
+
} finally {
|
|
101
|
+
FullScreenLoaderManager.hide();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Con Timeout Automático
|
|
107
|
+
|
|
108
|
+
```tsx
|
|
109
|
+
function showTemporaryLoader() {
|
|
110
|
+
FullScreenLoaderManager.show();
|
|
111
|
+
|
|
112
|
+
// Auto-ocultar después de 3 segundos
|
|
113
|
+
setTimeout(() => {
|
|
114
|
+
FullScreenLoaderManager.hide();
|
|
115
|
+
}, 3000);
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Operaciones Paralelas con Promise.all
|
|
120
|
+
|
|
121
|
+
```tsx
|
|
122
|
+
async function fetchMultipleResources() {
|
|
123
|
+
FullScreenLoaderManager.show();
|
|
124
|
+
|
|
125
|
+
try {
|
|
126
|
+
const [users, products, orders] = await Promise.all([
|
|
127
|
+
api.getUsers(),
|
|
128
|
+
api.getProducts(),
|
|
129
|
+
api.getOrders(),
|
|
130
|
+
]);
|
|
131
|
+
|
|
132
|
+
return { users, products, orders };
|
|
133
|
+
} finally {
|
|
134
|
+
FullScreenLoaderManager.hide();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Navegación con Next.js Router
|
|
140
|
+
|
|
141
|
+
```tsx
|
|
142
|
+
import { useRouter } from "next/navigation";
|
|
143
|
+
import { FullScreenLoaderManager } from "@adamosuiteservices/ui/full-screen-loader";
|
|
144
|
+
|
|
145
|
+
function NavigationComponent() {
|
|
146
|
+
const router = useRouter();
|
|
147
|
+
|
|
148
|
+
const handleNavigation = () => {
|
|
149
|
+
FullScreenLoaderManager.show();
|
|
150
|
+
router.push("/dashboard");
|
|
151
|
+
// El loader se ocultará después de que la página cargue
|
|
152
|
+
// Puedes usar un useEffect en la página de destino para ocultarlo
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
return <Button onClick={handleNavigation}>Go to Dashboard</Button>;
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Carga Inicial de la Aplicación
|
|
160
|
+
|
|
161
|
+
```tsx
|
|
162
|
+
import { FullScreenLoaderManager } from "@adamosuiteservices/ui/full-screen-loader";
|
|
163
|
+
import { useEffect } from "react";
|
|
164
|
+
|
|
165
|
+
function App() {
|
|
166
|
+
useEffect(() => {
|
|
167
|
+
// Mostrar loader al inicio
|
|
168
|
+
FullScreenLoaderManager.show();
|
|
169
|
+
|
|
170
|
+
// Inicializar la app
|
|
171
|
+
initializeApp().then(() => {
|
|
172
|
+
FullScreenLoaderManager.hide();
|
|
173
|
+
});
|
|
174
|
+
}, []);
|
|
175
|
+
|
|
176
|
+
return (
|
|
177
|
+
<>
|
|
178
|
+
{/* App content */}
|
|
179
|
+
<FullScreenLoader />
|
|
180
|
+
</>
|
|
181
|
+
);
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## API Reference
|
|
186
|
+
|
|
187
|
+
### FullScreenLoaderManager
|
|
188
|
+
|
|
189
|
+
Clase singleton para controlar el estado del loader globalmente.
|
|
190
|
+
|
|
191
|
+
#### `show()`
|
|
192
|
+
|
|
193
|
+
Muestra el loader de pantalla completa.
|
|
194
|
+
|
|
195
|
+
```tsx
|
|
196
|
+
FullScreenLoaderManager.show();
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
**Uso**: Llamar antes de iniciar operaciones que requieran bloquear la UI.
|
|
200
|
+
|
|
201
|
+
#### `hide()`
|
|
202
|
+
|
|
203
|
+
Oculta el loader de pantalla completa.
|
|
204
|
+
|
|
205
|
+
```tsx
|
|
206
|
+
FullScreenLoaderManager.hide();
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**Uso**: Llamar después de completar operaciones, siempre en un bloque `finally` para garantizar ejecución.
|
|
210
|
+
|
|
211
|
+
## Comportamiento
|
|
212
|
+
|
|
213
|
+
### Estado Global
|
|
214
|
+
|
|
215
|
+
El loader usa un patrón observable que sincroniza el estado en toda la aplicación:
|
|
216
|
+
|
|
217
|
+
- Una sola instancia de `FullScreenLoader` responde a todos los llamados de `show()`/`hide()`
|
|
218
|
+
- Múltiples componentes pueden controlar el loader sin conflictos
|
|
219
|
+
- El estado se mantiene consistente incluso con navegación
|
|
220
|
+
|
|
221
|
+
### Z-Index y Posicionamiento
|
|
222
|
+
|
|
223
|
+
- **z-index**: `z-100` para estar sobre todo el contenido
|
|
224
|
+
- **Posicionamiento**: `fixed` con `inset-0` (cubre toda la ventana)
|
|
225
|
+
- **Centrado**: Flexbox con `items-center` y `justify-center`
|
|
226
|
+
|
|
227
|
+
### Estilos Visuales
|
|
228
|
+
|
|
229
|
+
```css
|
|
230
|
+
/* Overlay background */
|
|
231
|
+
bg-black/50 /* Negro con 50% opacidad */
|
|
232
|
+
|
|
233
|
+
/* Spinner */
|
|
234
|
+
text-4xl /* Tamaño grande del spinner */
|
|
235
|
+
text-primary /* Color primario del tema */
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
## Best Practices
|
|
239
|
+
|
|
240
|
+
### ✅ DO: Usar `finally` para Garantizar Hide
|
|
241
|
+
|
|
242
|
+
```tsx
|
|
243
|
+
async function operation() {
|
|
244
|
+
FullScreenLoaderManager.show();
|
|
245
|
+
try {
|
|
246
|
+
await asyncOperation();
|
|
247
|
+
} finally {
|
|
248
|
+
// ✅ Siempre se ejecuta, incluso si hay error
|
|
249
|
+
FullScreenLoaderManager.hide();
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### ❌ DON'T: Olvidar Ocultar el Loader
|
|
255
|
+
|
|
256
|
+
```tsx
|
|
257
|
+
async function operation() {
|
|
258
|
+
FullScreenLoaderManager.show();
|
|
259
|
+
await asyncOperation();
|
|
260
|
+
// ❌ Si hay error, el loader queda visible
|
|
261
|
+
FullScreenLoaderManager.hide();
|
|
262
|
+
}
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### ✅ DO: Una Sola Instancia en la App
|
|
266
|
+
|
|
267
|
+
```tsx
|
|
268
|
+
// ✅ En App.tsx o layout principal
|
|
269
|
+
function App() {
|
|
270
|
+
return (
|
|
271
|
+
<>
|
|
272
|
+
<YourApp />
|
|
273
|
+
<FullScreenLoader />
|
|
274
|
+
</>
|
|
275
|
+
);
|
|
276
|
+
}
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
### ❌ DON'T: Múltiples Instancias
|
|
280
|
+
|
|
281
|
+
```tsx
|
|
282
|
+
// ❌ No crear múltiples instancias
|
|
283
|
+
function PageA() {
|
|
284
|
+
return (
|
|
285
|
+
<>
|
|
286
|
+
<Content />
|
|
287
|
+
<FullScreenLoader /> {/* ❌ Redundante */}
|
|
288
|
+
</>
|
|
289
|
+
);
|
|
290
|
+
}
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### ✅ DO: Operaciones Críticas y Largas
|
|
294
|
+
|
|
295
|
+
```tsx
|
|
296
|
+
// ✅ Bueno para: autenticación, carga inicial, procesamiento pesado
|
|
297
|
+
async function authenticate() {
|
|
298
|
+
FullScreenLoaderManager.show();
|
|
299
|
+
await login();
|
|
300
|
+
FullScreenLoaderManager.hide();
|
|
301
|
+
}
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
### ❌ DON'T: Operaciones Rápidas o Menores
|
|
305
|
+
|
|
306
|
+
```tsx
|
|
307
|
+
// ❌ No usar para operaciones menores de 500ms
|
|
308
|
+
async function quickAction() {
|
|
309
|
+
FullScreenLoaderManager.show(); // ❌ Muy intrusivo
|
|
310
|
+
await quickApi(); // < 500ms
|
|
311
|
+
FullScreenLoaderManager.hide();
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
// ✅ Mejor usar un spinner local o skeleton
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
## Casos de Uso
|
|
318
|
+
|
|
319
|
+
### ✅ Recomendado Para:
|
|
320
|
+
|
|
321
|
+
- **Autenticación y Login**: Procesos de inicio de sesión
|
|
322
|
+
- **Carga Inicial**: Primera carga de datos de la aplicación
|
|
323
|
+
- **Navegación Crítica**: Cambios de página con carga pesada
|
|
324
|
+
- **Procesamiento Pesado**: Cálculos complejos o batch operations
|
|
325
|
+
- **Uploads Grandes**: Subida de archivos que bloquean la UI
|
|
326
|
+
- **Transacciones Críticas**: Operaciones que no deben interrumpirse
|
|
327
|
+
|
|
328
|
+
### ❌ No Recomendado Para:
|
|
329
|
+
|
|
330
|
+
- **Operaciones Rápidas** (< 500ms): Usar spinner local
|
|
331
|
+
- **Búsquedas en Tiempo Real**: Usar loading states inline
|
|
332
|
+
- **Validaciones de Formulario**: Usar feedback local
|
|
333
|
+
- **Acciones Menores**: Usar botones con loading state
|
|
334
|
+
- **Scroll Infinito**: Usar skeleton loaders
|
|
335
|
+
|
|
336
|
+
## Accesibilidad
|
|
337
|
+
|
|
338
|
+
El componente incluye consideraciones básicas de accesibilidad:
|
|
339
|
+
|
|
340
|
+
- **Portal rendering**: Asegura que el loader esté en el nivel superior del DOM
|
|
341
|
+
- **Fixed positioning**: Garantiza visibilidad sobre todo el contenido
|
|
342
|
+
- **Visual feedback**: Spinner animado claramente visible
|
|
343
|
+
|
|
344
|
+
### Mejoras Sugeridas
|
|
345
|
+
|
|
346
|
+
Para aplicaciones con requisitos estrictos de accesibilidad, considera agregar:
|
|
347
|
+
|
|
348
|
+
```tsx
|
|
349
|
+
<div role="dialog" aria-modal="true" aria-label="Loading" aria-busy="true">
|
|
350
|
+
<Spinner />
|
|
351
|
+
</div>
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
## Troubleshooting
|
|
355
|
+
|
|
356
|
+
### El loader no aparece
|
|
357
|
+
|
|
358
|
+
**Causa**: Falta el componente `<FullScreenLoader />` en la aplicación.
|
|
359
|
+
|
|
360
|
+
**Solución**: Agregar en el nivel más alto de tu app (App.tsx, layout, etc.).
|
|
361
|
+
|
|
362
|
+
### El loader queda visible permanentemente
|
|
363
|
+
|
|
364
|
+
**Causa**: No se llamó `hide()` después de una operación, probablemente debido a un error.
|
|
365
|
+
|
|
366
|
+
**Solución**: Siempre usar bloque `try/finally` para garantizar que `hide()` se ejecute.
|
|
367
|
+
|
|
368
|
+
```tsx
|
|
369
|
+
try {
|
|
370
|
+
await operation();
|
|
371
|
+
} finally {
|
|
372
|
+
FullScreenLoaderManager.hide(); // ✅ Siempre se ejecuta
|
|
373
|
+
}
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
### El loader aparece detrás de otros elementos
|
|
377
|
+
|
|
378
|
+
**Causa**: Algún elemento tiene un `z-index` mayor que 100.
|
|
379
|
+
|
|
380
|
+
**Solución**: El loader usa `z-100`. Verifica que ningún elemento tenga un z-index mayor. Si es necesario, ajusta el z-index del loader.
|
|
381
|
+
|
|
382
|
+
### Múltiples loaders aparecen simultáneamente
|
|
383
|
+
|
|
384
|
+
**Causa**: Múltiples instancias de `<FullScreenLoader />` en la aplicación.
|
|
385
|
+
|
|
386
|
+
**Solución**: Solo debe haber una instancia en toda la aplicación, en el nivel más alto.
|
|
387
|
+
|
|
388
|
+
## Integración con Otros Componentes
|
|
389
|
+
|
|
390
|
+
### Con React Query
|
|
391
|
+
|
|
392
|
+
```tsx
|
|
393
|
+
import { useMutation } from "@tanstack/react-query";
|
|
394
|
+
import { FullScreenLoaderManager } from "@adamosuiteservices/ui/full-screen-loader";
|
|
395
|
+
|
|
396
|
+
function MyComponent() {
|
|
397
|
+
const mutation = useMutation({
|
|
398
|
+
mutationFn: saveData,
|
|
399
|
+
onMutate: () => {
|
|
400
|
+
FullScreenLoaderManager.show();
|
|
401
|
+
},
|
|
402
|
+
onSettled: () => {
|
|
403
|
+
FullScreenLoaderManager.hide();
|
|
404
|
+
},
|
|
405
|
+
});
|
|
406
|
+
|
|
407
|
+
return <Button onClick={() => mutation.mutate()}>Save</Button>;
|
|
408
|
+
}
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
### Con Redux/Zustand
|
|
412
|
+
|
|
413
|
+
```tsx
|
|
414
|
+
// En tu action/slice
|
|
415
|
+
export const fetchData = createAsyncThunk("data/fetch", async () => {
|
|
416
|
+
FullScreenLoaderManager.show();
|
|
417
|
+
try {
|
|
418
|
+
const data = await api.getData();
|
|
419
|
+
return data;
|
|
420
|
+
} finally {
|
|
421
|
+
FullScreenLoaderManager.hide();
|
|
422
|
+
}
|
|
423
|
+
});
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
### Con Form Submit
|
|
427
|
+
|
|
428
|
+
```tsx
|
|
429
|
+
import { useForm } from "react-hook-form";
|
|
430
|
+
import { FullScreenLoaderManager } from "@adamosuiteservices/ui/full-screen-loader";
|
|
431
|
+
|
|
432
|
+
function FormComponent() {
|
|
433
|
+
const { handleSubmit } = useForm();
|
|
434
|
+
|
|
435
|
+
const onSubmit = async (data) => {
|
|
436
|
+
FullScreenLoaderManager.show();
|
|
437
|
+
try {
|
|
438
|
+
await api.submitForm(data);
|
|
439
|
+
} finally {
|
|
440
|
+
FullScreenLoaderManager.hide();
|
|
441
|
+
}
|
|
442
|
+
};
|
|
443
|
+
|
|
444
|
+
return <form onSubmit={handleSubmit(onSubmit)}>...</form>;
|
|
445
|
+
}
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
## Componentes Relacionados
|
|
449
|
+
|
|
450
|
+
- **[Spinner](../../ui/spinner.md)**: Loading indicator usado internamente
|
|
451
|
+
- **[Button](../../ui/button.md)**: Para triggers de operaciones con loading state
|
|
452
|
+
- **[Toaster](./toaster.md)**: Para feedback después de operaciones (combinar con loader)
|
|
453
|
+
|
|
454
|
+
## Ejemplo Completo
|
|
455
|
+
|
|
456
|
+
```tsx
|
|
457
|
+
import {
|
|
458
|
+
FullScreenLoader,
|
|
459
|
+
FullScreenLoaderManager,
|
|
460
|
+
} from "@adamosuiteservices/ui/full-screen-loader";
|
|
461
|
+
import { ToastManager } from "@adamosuiteservices/ui/toaster";
|
|
462
|
+
import { Button } from "@adamosuiteservices/ui/button";
|
|
463
|
+
|
|
464
|
+
function App() {
|
|
465
|
+
return (
|
|
466
|
+
<>
|
|
467
|
+
<Dashboard />
|
|
468
|
+
<FullScreenLoader />
|
|
469
|
+
</>
|
|
470
|
+
);
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
function Dashboard() {
|
|
474
|
+
const handleSync = async () => {
|
|
475
|
+
FullScreenLoaderManager.show();
|
|
476
|
+
|
|
477
|
+
try {
|
|
478
|
+
await syncData();
|
|
479
|
+
ToastManager.show({
|
|
480
|
+
message: "Data synchronized successfully",
|
|
481
|
+
variant: "success",
|
|
482
|
+
});
|
|
483
|
+
} catch (error) {
|
|
484
|
+
ToastManager.show({
|
|
485
|
+
message: "Failed to synchronize data",
|
|
486
|
+
variant: "destructive",
|
|
487
|
+
});
|
|
488
|
+
} finally {
|
|
489
|
+
FullScreenLoaderManager.hide();
|
|
490
|
+
}
|
|
491
|
+
};
|
|
492
|
+
|
|
493
|
+
return (
|
|
494
|
+
<div>
|
|
495
|
+
<h1>Dashboard</h1>
|
|
496
|
+
<Button onClick={handleSync}>Sync Data</Button>
|
|
497
|
+
</div>
|
|
498
|
+
);
|
|
499
|
+
}
|
|
500
|
+
```
|