@wakastellar/ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/dist/blocks/footer/index.d.ts +19 -0
  2. package/dist/blocks/headtab/index.d.ts +27 -0
  3. package/dist/blocks/index.d.ts +5 -0
  4. package/dist/blocks/language-selector/index.d.ts +6 -0
  5. package/dist/blocks/layout/index.d.ts +28 -0
  6. package/dist/blocks/login/index.d.ts +13 -0
  7. package/dist/components/DataTable/DataTable.d.ts +17 -0
  8. package/dist/components/DataTable/DataTableAdvanced.d.ts +27 -0
  9. package/dist/components/DataTable/DataTableColumnResizer.d.ts +8 -0
  10. package/dist/components/DataTable/DataTableContextMenu.d.ts +47 -0
  11. package/dist/components/DataTable/DataTableEditCell.d.ts +29 -0
  12. package/dist/components/DataTable/DataTableFilters.d.ts +14 -0
  13. package/dist/components/DataTable/DataTableGrouping.d.ts +25 -0
  14. package/dist/components/DataTable/DataTablePagination.d.ts +8 -0
  15. package/dist/components/DataTable/DataTableSelection.d.ts +46 -0
  16. package/dist/components/DataTable/DataTableToolbar.d.ts +14 -0
  17. package/dist/components/DataTable/examples/EditExample.d.ts +2 -0
  18. package/dist/components/DataTable/hooks/useDataTable.d.ts +24 -0
  19. package/dist/components/DataTable/hooks/useDataTableAdvanced.d.ts +38 -0
  20. package/dist/components/DataTable/hooks/useDataTableEdit.d.ts +22 -0
  21. package/dist/components/DataTable/hooks/useDataTableExport.d.ts +15 -0
  22. package/dist/components/DataTable/hooks/useDataTableImport.d.ts +12 -0
  23. package/dist/components/DataTable/hooks/useDataTableTheme.d.ts +16 -0
  24. package/dist/components/DataTable/hooks/useDataTableVirtualization.d.ts +19 -0
  25. package/dist/components/DataTable/hooks/useTableLayout.d.ts +26 -0
  26. package/dist/components/DataTable/index.d.ts +37 -0
  27. package/dist/components/DataTable/types.d.ts +461 -0
  28. package/dist/components/DataTable/utils.d.ts +37 -0
  29. package/dist/components/accordion/index.d.ts +7 -0
  30. package/dist/components/alert/index.d.ts +8 -0
  31. package/dist/components/alert-dialog/index.d.ts +20 -0
  32. package/dist/components/aspect-ratio/index.d.ts +3 -0
  33. package/dist/components/avatar/index.d.ts +6 -0
  34. package/dist/components/badge/index.d.ts +9 -0
  35. package/dist/components/button/index.d.ts +11 -0
  36. package/dist/components/calendar/index.d.ts +8 -0
  37. package/dist/components/card/index.d.ts +8 -0
  38. package/dist/components/checkbox/index.d.ts +4 -0
  39. package/dist/components/code/index.d.ts +29 -0
  40. package/dist/components/collapsible/index.d.ts +5 -0
  41. package/dist/components/command/index.d.ts +51 -0
  42. package/dist/components/context-menu/index.d.ts +27 -0
  43. package/dist/components/dialog/index.d.ts +19 -0
  44. package/dist/components/dropdown-menu/index.d.ts +27 -0
  45. package/dist/components/form/index.d.ts +23 -0
  46. package/dist/components/hover-card/index.d.ts +6 -0
  47. package/dist/components/index.d.ts +52 -0
  48. package/dist/components/input/index.d.ts +5 -0
  49. package/dist/components/input-otp/index.d.ts +51 -0
  50. package/dist/components/label/index.d.ts +5 -0
  51. package/dist/components/language-selector/index.d.ts +40 -0
  52. package/dist/components/menubar/index.d.ts +28 -0
  53. package/dist/components/navigation-menu/index.d.ts +12 -0
  54. package/dist/components/popover/index.d.ts +6 -0
  55. package/dist/components/progress/index.d.ts +4 -0
  56. package/dist/components/radio-group/index.d.ts +5 -0
  57. package/dist/components/scroll-area/index.d.ts +5 -0
  58. package/dist/components/select/index.d.ts +13 -0
  59. package/dist/components/separator/index.d.ts +4 -0
  60. package/dist/components/sheet/index.d.ts +27 -0
  61. package/dist/components/skeleton/index.d.ts +2 -0
  62. package/dist/components/slider/index.d.ts +4 -0
  63. package/dist/components/switch/index.d.ts +4 -0
  64. package/dist/components/table/index.d.ts +10 -0
  65. package/dist/components/tabs/index.d.ts +7 -0
  66. package/dist/components/textarea/index.d.ts +5 -0
  67. package/dist/components/theme-selector/index.d.ts +8 -0
  68. package/dist/components/toast/index.d.ts +15 -0
  69. package/dist/components/toaster/index.d.ts +1 -0
  70. package/dist/components/toggle/index.d.ts +12 -0
  71. package/dist/components/tooltip/index.d.ts +7 -0
  72. package/dist/components/typography/index.d.ts +85 -0
  73. package/dist/components/waka-admincrumb/index.d.ts +41 -0
  74. package/dist/components/waka-carousel/index.d.ts +105 -0
  75. package/dist/components/waka-datetime-picker/index.d.ts +135 -0
  76. package/dist/components/waka-datetime-picker.form-integration/index.d.ts +69 -0
  77. package/dist/components/waka-notifications/index.d.ts +40 -0
  78. package/dist/components/waka-spinner/index.d.ts +46 -0
  79. package/dist/components/waka-theme-creator/index.d.ts +59 -0
  80. package/dist/components/waka-theme-manager/index.d.ts +62 -0
  81. package/dist/context/admincrumb-context.d.ts +34 -0
  82. package/dist/context/index.d.ts +8 -0
  83. package/dist/context/language-context.d.ts +57 -0
  84. package/dist/context/theme-context.d.ts +39 -0
  85. package/dist/context/theme-provider.d.ts +74 -0
  86. package/dist/context/waka-provider.d.ts +50 -0
  87. package/dist/hooks/index.d.ts +1 -0
  88. package/dist/hooks/use-toast.d.ts +44 -0
  89. package/dist/hooks/use-translation.d.ts +15 -0
  90. package/dist/hooks/useToast.d.ts +44 -0
  91. package/dist/index.cjs.js +70 -0
  92. package/dist/index.d.ts +20 -0
  93. package/dist/index.es.js +16379 -0
  94. package/dist/lib/i18n.d.ts +4 -0
  95. package/dist/types/provider.d.ts +108 -0
  96. package/dist/ui.css +1 -0
  97. package/dist/utils/cn.d.ts +1 -0
  98. package/dist/utils/datetime-helpers.d.ts +137 -0
  99. package/dist/utils/index.d.ts +5 -0
  100. package/dist/utils/theme-loader.d.ts +101 -0
  101. package/dist/utils/tweak.d.ts +18 -0
  102. package/package.json +118 -0
  103. package/src/styles/carousel.css +687 -0
  104. package/src/styles/code-highlight.css +232 -0
  105. package/src/styles/datepicker.css +420 -0
  106. package/src/styles/globals.css +84 -0
  107. package/src/styles/prism.css +261 -0
  108. package/src/styles/themes/forest.css +55 -0
  109. package/src/styles/themes/index.css +7 -0
  110. package/src/styles/themes/monochrome.css +55 -0
  111. package/src/styles/themes/perpetuity.css +55 -0
  112. package/src/styles/themes/sunset.css +55 -0
  113. package/src/styles/themes/twilight.css +55 -0
@@ -0,0 +1,4 @@
1
+ import { default as i18n } from 'i18next';
2
+ declare let initPromise: Promise<any> | null;
3
+ export default i18n;
4
+ export { initPromise };
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Configuration d'un thème
3
+ */
4
+ export interface ThemeConfigItem {
5
+ /** Identifiant du thème */
6
+ id: string;
7
+ /** Nom d'affichage */
8
+ label: string;
9
+ /** Description optionnelle */
10
+ description?: string;
11
+ /** Couleur représentative */
12
+ previewColor?: string;
13
+ }
14
+ /**
15
+ * Configuration S3 pour les thèmes
16
+ */
17
+ export interface ThemeS3Config {
18
+ /** URL de base du bucket S3 */
19
+ baseUrl: string;
20
+ /** Préfixe des fichiers (ex: "themes/") */
21
+ prefix?: string;
22
+ /** Extension des fichiers (défaut: "css") */
23
+ extension?: string;
24
+ /** Headers personnalisés */
25
+ headers?: Record<string, string>;
26
+ /** Timeout en millisecondes */
27
+ timeout?: number;
28
+ }
29
+ /**
30
+ * Configuration du thème WakaStart
31
+ */
32
+ export interface WakaThemeConfig {
33
+ /** Thème par défaut à appliquer */
34
+ defaultTheme?: string;
35
+ /** Activer le stockage du thème dans localStorage */
36
+ storageKey?: string;
37
+ /** Liste des thèmes disponibles */
38
+ themes?: ThemeConfigItem[];
39
+ /** Thème système (auto) */
40
+ enableSystem?: boolean;
41
+ /** Configuration S3 pour charger les thèmes */
42
+ s3Config?: ThemeS3Config;
43
+ }
44
+ /**
45
+ * Configuration S3 pour le chargement des traductions
46
+ */
47
+ export interface WakaS3Config {
48
+ /** URL du bucket S3 */
49
+ bucketUrl: string;
50
+ /** Région AWS */
51
+ region?: string;
52
+ /** Clé d'accès (optionnel) */
53
+ accessKeyId?: string;
54
+ /** Clé secrète (optionnel) */
55
+ secretAccessKey?: string;
56
+ /** Dossier des traductions dans le bucket */
57
+ translationsPath?: string;
58
+ }
59
+ /**
60
+ * Configuration d'une langue
61
+ */
62
+ export interface LanguageConfigItem {
63
+ /** Code de la langue */
64
+ code: string;
65
+ /** Nom d'affichage */
66
+ label: string;
67
+ /** Emoji drapeau */
68
+ flagEmoji?: string;
69
+ /** URL du drapeau */
70
+ flag?: string;
71
+ }
72
+ /**
73
+ * Configuration de la langue et des traductions
74
+ */
75
+ export interface WakaLanguageConfig {
76
+ /** Langue par défaut */
77
+ defaultLanguage: string;
78
+ /** Langues supportées */
79
+ supportedLanguages: string[];
80
+ /** Liste des langues avec configuration */
81
+ languages?: LanguageConfigItem[];
82
+ /** Configuration S3 pour le chargement distant des traductions */
83
+ s3Config?: WakaS3Config;
84
+ /** Traductions locales (fallback ou complètes) */
85
+ resources?: Record<string, Record<string, Record<string, string>>>;
86
+ /** Activer le stockage de la langue dans localStorage */
87
+ storageKey?: string;
88
+ }
89
+ /**
90
+ * Configuration globale du WakaProvider
91
+ */
92
+ export interface WakaProviderConfig {
93
+ /** Configuration du thème */
94
+ theme?: WakaThemeConfig;
95
+ /** Configuration de la langue */
96
+ language: WakaLanguageConfig;
97
+ /** Activer le mode debug */
98
+ debug?: boolean;
99
+ }
100
+ /**
101
+ * Props du WakaProvider
102
+ */
103
+ export interface WakaProviderProps {
104
+ /** Configuration du provider */
105
+ config: WakaProviderConfig;
106
+ /** Children */
107
+ children: React.ReactNode;
108
+ }
package/dist/ui.css ADDED
@@ -0,0 +1 @@
1
+ @charset "UTF-8";.react-datepicker__navigation-icon:before,.react-datepicker__year-read-view--down-arrow,.react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view--down-arrow{border-color:#ccc;border-style:solid;border-width:3px 3px 0 0;content:"";display:block;height:9px;position:absolute;top:6px;width:9px}.react-datepicker__sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.react-datepicker-wrapper{display:inline-block;padding:0;border:0}.react-datepicker{font-family:Helvetica Neue,helvetica,arial,sans-serif;font-size:.8rem;background-color:#fff;color:#000;border:1px solid #aeaeae;border-radius:.3rem;display:inline-block;position:relative;line-height:initial}.react-datepicker--time-only .react-datepicker__time-container{border-left:0}.react-datepicker--time-only .react-datepicker__time,.react-datepicker--time-only .react-datepicker__time-box{border-bottom-left-radius:.3rem;border-bottom-right-radius:.3rem}.react-datepicker-popper{z-index:1;line-height:0}.react-datepicker-popper .react-datepicker__triangle{stroke:#aeaeae}.react-datepicker-popper[data-placement^=bottom] .react-datepicker__triangle{fill:#f0f0f0;color:#f0f0f0}.react-datepicker-popper[data-placement^=top] .react-datepicker__triangle{fill:#fff;color:#fff}.react-datepicker__header{text-align:center;background-color:#f0f0f0;border-bottom:1px solid #aeaeae;border-top-left-radius:.3rem;padding:8px 0;position:relative}.react-datepicker__header--time{padding-bottom:8px;padding-left:5px;padding-right:5px}.react-datepicker__header--time:not(.react-datepicker__header--time--only){border-top-left-radius:0}.react-datepicker__header:not(.react-datepicker__header--has-time-select){border-top-right-radius:.3rem}.react-datepicker__year-dropdown-container--select,.react-datepicker__month-dropdown-container--select,.react-datepicker__month-year-dropdown-container--select,.react-datepicker__year-dropdown-container--scroll,.react-datepicker__month-dropdown-container--scroll,.react-datepicker__month-year-dropdown-container--scroll{display:inline-block;margin:0 15px}.react-datepicker__current-month,.react-datepicker-time__header,.react-datepicker-year-header{margin-top:0;color:#000;font-weight:700;font-size:.944rem}h2.react-datepicker__current-month{padding:0;margin:0}.react-datepicker-time__header{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.react-datepicker__navigation{align-items:center;background:none;display:flex;justify-content:center;text-align:center;cursor:pointer;position:absolute;top:2px;padding:0;border:none;z-index:1;height:32px;width:32px;text-indent:-999em;overflow:hidden}.react-datepicker__navigation--previous{left:2px}.react-datepicker__navigation--next{right:2px}.react-datepicker__navigation--next--with-time:not(.react-datepicker__navigation--next--with-today-button){right:85px}.react-datepicker__navigation--years{position:relative;top:0;display:block;margin-left:auto;margin-right:auto}.react-datepicker__navigation--years-previous{top:4px}.react-datepicker__navigation--years-upcoming{top:-4px}.react-datepicker__navigation:hover *:before{border-color:#a6a6a6}.react-datepicker__navigation-icon{position:relative;top:-1px;font-size:20px;width:0}.react-datepicker__navigation-icon--next{left:-2px}.react-datepicker__navigation-icon--next:before{transform:rotate(45deg);left:-7px}.react-datepicker__navigation-icon--previous{right:-2px}.react-datepicker__navigation-icon--previous:before{transform:rotate(225deg);right:-7px}.react-datepicker__month-container{float:left}.react-datepicker__year{margin:.4rem;text-align:center}.react-datepicker__year-wrapper{display:flex;flex-wrap:wrap;max-width:180px}.react-datepicker__year .react-datepicker__year-text{display:inline-block;width:4rem;margin:2px}.react-datepicker__month{margin:.4rem;text-align:center}.react-datepicker__month .react-datepicker__month-text,.react-datepicker__month .react-datepicker__quarter-text{display:inline-block;width:4rem;margin:2px}.react-datepicker__input-time-container{clear:both;width:100%;float:left;margin:5px 0 10px 15px;text-align:left}.react-datepicker__input-time-container .react-datepicker-time__caption,.react-datepicker__input-time-container .react-datepicker-time__input-container{display:inline-block}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input{display:inline-block;margin-left:10px}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input{width:auto}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]::-webkit-inner-spin-button,.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]{-moz-appearance:textfield}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__delimiter{margin-left:5px;display:inline-block}.react-datepicker__time-container{float:right;border-left:1px solid #aeaeae;width:85px}.react-datepicker__time-container--with-today-button{display:inline;border:1px solid #aeaeae;border-radius:.3rem;position:absolute;right:-87px;top:0}.react-datepicker__time-container .react-datepicker__time{position:relative;background:#fff;border-bottom-right-radius:.3rem}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box{width:85px;overflow-x:hidden;margin:0 auto;text-align:center;border-bottom-right-radius:.3rem}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list{list-style:none;margin:0;height:calc(195px + .85rem);overflow-y:scroll;padding-right:0;padding-left:0;width:100%;box-sizing:content-box}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item{height:30px;padding:5px 10px;white-space:nowrap}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item:hover{cursor:pointer;background-color:#f0f0f0}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected{background-color:#216ba5;color:#fff;font-weight:700}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected:hover{background-color:#216ba5}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled{color:#ccc}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled:hover{cursor:default;background-color:transparent}.react-datepicker__week-number{color:#ccc;display:inline-block;width:1.7rem;line-height:1.7rem;text-align:center;margin:.166rem}.react-datepicker__week-number.react-datepicker__week-number--clickable{cursor:pointer}.react-datepicker__week-number.react-datepicker__week-number--clickable:not(.react-datepicker__week-number--selected):hover{border-radius:.3rem;background-color:#f0f0f0}.react-datepicker__week-number--selected{border-radius:.3rem;background-color:#216ba5;color:#fff}.react-datepicker__week-number--selected:hover{background-color:#1d5d90}.react-datepicker__day-names{white-space:nowrap;margin-bottom:-8px}.react-datepicker__week{white-space:nowrap}.react-datepicker__day-name,.react-datepicker__day,.react-datepicker__time-name{color:#000;display:inline-block;width:1.7rem;line-height:1.7rem;text-align:center;margin:.166rem}.react-datepicker__day,.react-datepicker__month-text,.react-datepicker__quarter-text,.react-datepicker__year-text{cursor:pointer}.react-datepicker__day:not([aria-disabled=true]):hover,.react-datepicker__month-text:not([aria-disabled=true]):hover,.react-datepicker__quarter-text:not([aria-disabled=true]):hover,.react-datepicker__year-text:not([aria-disabled=true]):hover{border-radius:.3rem;background-color:#f0f0f0}.react-datepicker__day--today,.react-datepicker__month-text--today,.react-datepicker__quarter-text--today,.react-datepicker__year-text--today{font-weight:700}.react-datepicker__day--highlighted,.react-datepicker__month-text--highlighted,.react-datepicker__quarter-text--highlighted,.react-datepicker__year-text--highlighted{border-radius:.3rem;background-color:#3dcc4a;color:#fff}.react-datepicker__day--highlighted:not([aria-disabled=true]):hover,.react-datepicker__month-text--highlighted:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--highlighted:not([aria-disabled=true]):hover,.react-datepicker__year-text--highlighted:not([aria-disabled=true]):hover{background-color:#32be3f}.react-datepicker__day--highlighted-custom-1,.react-datepicker__month-text--highlighted-custom-1,.react-datepicker__quarter-text--highlighted-custom-1,.react-datepicker__year-text--highlighted-custom-1{color:#f0f}.react-datepicker__day--highlighted-custom-2,.react-datepicker__month-text--highlighted-custom-2,.react-datepicker__quarter-text--highlighted-custom-2,.react-datepicker__year-text--highlighted-custom-2{color:green}.react-datepicker__day--holidays,.react-datepicker__month-text--holidays,.react-datepicker__quarter-text--holidays,.react-datepicker__year-text--holidays{position:relative;border-radius:.3rem;background-color:#ff6803;color:#fff}.react-datepicker__day--holidays .overlay,.react-datepicker__month-text--holidays .overlay,.react-datepicker__quarter-text--holidays .overlay,.react-datepicker__year-text--holidays .overlay{position:absolute;bottom:100%;left:50%;transform:translate(-50%);background-color:#333;color:#fff;padding:4px;border-radius:4px;white-space:nowrap;visibility:hidden;opacity:0;transition:visibility 0s,opacity .3s ease-in-out}.react-datepicker__day--holidays:not([aria-disabled=true]):hover,.react-datepicker__month-text--holidays:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--holidays:not([aria-disabled=true]):hover,.react-datepicker__year-text--holidays:not([aria-disabled=true]):hover{background-color:#cf5300}.react-datepicker__day--holidays:hover .overlay,.react-datepicker__month-text--holidays:hover .overlay,.react-datepicker__quarter-text--holidays:hover .overlay,.react-datepicker__year-text--holidays:hover .overlay{visibility:visible;opacity:1}.react-datepicker__day--selected,.react-datepicker__day--in-selecting-range,.react-datepicker__day--in-range,.react-datepicker__month-text--selected,.react-datepicker__month-text--in-selecting-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--selected,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--selected,.react-datepicker__year-text--in-selecting-range,.react-datepicker__year-text--in-range{border-radius:.3rem;background-color:#216ba5;color:#fff}.react-datepicker__day--selected:not([aria-disabled=true]):hover,.react-datepicker__day--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__day--in-range:not([aria-disabled=true]):hover,.react-datepicker__month-text--selected:not([aria-disabled=true]):hover,.react-datepicker__month-text--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__month-text--in-range:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--selected:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--in-range:not([aria-disabled=true]):hover,.react-datepicker__year-text--selected:not([aria-disabled=true]):hover,.react-datepicker__year-text--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__year-text--in-range:not([aria-disabled=true]):hover{background-color:#1d5d90}.react-datepicker__day--keyboard-selected,.react-datepicker__month-text--keyboard-selected,.react-datepicker__quarter-text--keyboard-selected,.react-datepicker__year-text--keyboard-selected{border-radius:.3rem;background-color:#bad9f1;color:#000}.react-datepicker__day--keyboard-selected:not([aria-disabled=true]):hover,.react-datepicker__month-text--keyboard-selected:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--keyboard-selected:not([aria-disabled=true]):hover,.react-datepicker__year-text--keyboard-selected:not([aria-disabled=true]):hover{background-color:#1d5d90}.react-datepicker__day--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__month-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__quarter-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__year-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range){background-color:#216ba580}.react-datepicker__month--selecting-range .react-datepicker__day--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__day--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__month-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__month-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__quarter-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__quarter-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__year-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__year-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range){background-color:#f0f0f0;color:#000}.react-datepicker__day--disabled,.react-datepicker__month-text--disabled,.react-datepicker__quarter-text--disabled,.react-datepicker__year-text--disabled{cursor:default;color:#ccc}.react-datepicker__day--disabled .overlay,.react-datepicker__month-text--disabled .overlay,.react-datepicker__quarter-text--disabled .overlay,.react-datepicker__year-text--disabled .overlay{position:absolute;bottom:70%;left:50%;transform:translate(-50%);background-color:#333;color:#fff;padding:4px;border-radius:4px;white-space:nowrap;visibility:hidden;opacity:0;transition:visibility 0s,opacity .3s ease-in-out}.react-datepicker__input-container{position:relative;display:inline-block;width:100%}.react-datepicker__input-container .react-datepicker__calendar-icon{position:absolute;padding:.5rem;box-sizing:content-box}.react-datepicker__view-calendar-icon input{padding:6px 10px 5px 25px}.react-datepicker__year-read-view,.react-datepicker__month-read-view,.react-datepicker__month-year-read-view{border:1px solid transparent;border-radius:.3rem;position:relative}.react-datepicker__year-read-view:hover,.react-datepicker__month-read-view:hover,.react-datepicker__month-year-read-view:hover{cursor:pointer}.react-datepicker__year-read-view:hover .react-datepicker__year-read-view--down-arrow,.react-datepicker__year-read-view:hover .react-datepicker__month-read-view--down-arrow,.react-datepicker__month-read-view:hover .react-datepicker__year-read-view--down-arrow,.react-datepicker__month-read-view:hover .react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view:hover .react-datepicker__year-read-view--down-arrow,.react-datepicker__month-year-read-view:hover .react-datepicker__month-read-view--down-arrow{border-top-color:#b3b3b3}.react-datepicker__year-read-view--down-arrow,.react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view--down-arrow{transform:rotate(135deg);right:-16px;top:0}.react-datepicker__year-dropdown,.react-datepicker__month-dropdown,.react-datepicker__month-year-dropdown{background-color:#f0f0f0;position:absolute;width:50%;left:25%;top:30px;z-index:1;text-align:center;border-radius:.3rem;border:1px solid #aeaeae}.react-datepicker__year-dropdown:hover,.react-datepicker__month-dropdown:hover,.react-datepicker__month-year-dropdown:hover{cursor:pointer}.react-datepicker__year-dropdown--scrollable,.react-datepicker__month-dropdown--scrollable,.react-datepicker__month-year-dropdown--scrollable{height:150px;overflow-y:scroll}.react-datepicker__year-option,.react-datepicker__month-option,.react-datepicker__month-year-option{line-height:20px;width:100%;display:block;margin-left:auto;margin-right:auto}.react-datepicker__year-option:first-of-type,.react-datepicker__month-option:first-of-type,.react-datepicker__month-year-option:first-of-type{border-top-left-radius:.3rem;border-top-right-radius:.3rem}.react-datepicker__year-option:last-of-type,.react-datepicker__month-option:last-of-type,.react-datepicker__month-year-option:last-of-type{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-bottom-left-radius:.3rem;border-bottom-right-radius:.3rem}.react-datepicker__year-option:hover,.react-datepicker__month-option:hover,.react-datepicker__month-year-option:hover{background-color:#ccc}.react-datepicker__year-option:hover .react-datepicker__navigation--years-upcoming,.react-datepicker__month-option:hover .react-datepicker__navigation--years-upcoming,.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-upcoming{border-bottom-color:#b3b3b3}.react-datepicker__year-option:hover .react-datepicker__navigation--years-previous,.react-datepicker__month-option:hover .react-datepicker__navigation--years-previous,.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-previous{border-top-color:#b3b3b3}.react-datepicker__year-option--selected,.react-datepicker__month-option--selected,.react-datepicker__month-year-option--selected{position:absolute;left:15px}.react-datepicker__close-icon{cursor:pointer;background-color:transparent;border:0;outline:0;padding:0 6px 0 0;position:absolute;top:0;right:0;height:100%;display:table-cell;vertical-align:middle}.react-datepicker__close-icon:after{cursor:pointer;background-color:#216ba5;color:#fff;border-radius:50%;height:16px;width:16px;padding:2px;font-size:12px;line-height:1;text-align:center;display:table-cell;vertical-align:middle;content:"×"}.react-datepicker__close-icon--disabled{cursor:default}.react-datepicker__close-icon--disabled:after{cursor:default;background-color:#ccc}.react-datepicker__today-button{background:#f0f0f0;border-top:1px solid #aeaeae;cursor:pointer;text-align:center;font-weight:700;padding:5px 0;clear:left}.react-datepicker__portal{position:fixed;width:100vw;height:100vh;background-color:#000c;left:0;top:0;justify-content:center;align-items:center;display:flex;z-index:2147483647}.react-datepicker__portal .react-datepicker__day-name,.react-datepicker__portal .react-datepicker__day,.react-datepicker__portal .react-datepicker__time-name{width:3rem;line-height:3rem}@media (max-width: 400px),(max-height: 550px){.react-datepicker__portal .react-datepicker__day-name,.react-datepicker__portal .react-datepicker__day,.react-datepicker__portal .react-datepicker__time-name{width:2rem;line-height:2rem}}.react-datepicker__portal .react-datepicker__current-month,.react-datepicker__portal .react-datepicker-time__header{font-size:1.44rem}.react-datepicker__children-container{width:13.8rem;margin:.4rem;padding-right:.2rem;padding-left:.2rem;height:auto}.react-datepicker__aria-live{position:absolute;clip-path:circle(0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;width:1px;white-space:nowrap}.react-datepicker__calendar-icon{width:1em;height:1em;vertical-align:-.125em}.react-datepicker-wrapper,.react-datepicker__input-container{display:block!important;width:100%!important}.react-datepicker-popper{z-index:9999!important}.react-datepicker{font-family:inherit!important;font-size:.875rem!important;background-color:hsl(var(--popover))!important;color:hsl(var(--popover-foreground))!important;border:1px solid hsl(var(--border))!important;border-radius:.5rem!important;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d!important;display:inline-block!important;position:relative!important}.react-datepicker__header{text-align:center!important;background-color:hsl(var(--popover))!important;border-bottom:1px solid hsl(var(--border))!important;border-top-left-radius:.5rem!important;border-top-right-radius:.5rem!important;padding:.5rem 0!important;position:relative!important}.react-datepicker__current-month{margin-top:0!important;color:hsl(var(--foreground))!important;font-weight:600!important;font-size:.875rem!important}.react-datepicker__day-names{margin-bottom:-.5rem!important;display:flex!important;justify-content:space-around!important;padding:.5rem 0!important}.react-datepicker__day-name{color:hsl(var(--muted-foreground))!important;display:inline-block!important;width:2rem!important;line-height:2rem!important;text-align:center!important;margin:.166rem!important;font-weight:500!important;font-size:.75rem!important}.react-datepicker__navigation{background:none!important;border:none!important;line-height:1.7rem!important;text-align:center!important;cursor:pointer!important;position:absolute!important;top:.5rem!important;padding:0!important;z-index:1!important;height:2rem!important;width:2rem!important;text-indent:-999em!important;overflow:hidden!important;border-radius:.25rem!important}.react-datepicker__navigation:hover{background-color:hsl(var(--accent))!important}.react-datepicker__navigation--previous{left:.5rem!important;border-right-color:hsl(var(--foreground))!important}.react-datepicker__navigation--next{right:.5rem!important;border-left-color:hsl(var(--foreground))!important}.react-datepicker__navigation-icon:before{border-color:hsl(var(--foreground))!important;border-style:solid!important;border-width:2px 2px 0 0!important;content:""!important;display:block!important;height:9px!important;position:absolute!important;top:6px!important;width:9px!important}.react-datepicker__navigation-icon--previous:before{transform:rotate(225deg)!important;right:-2px!important}.react-datepicker__navigation-icon--next:before{transform:rotate(45deg)!important;left:-2px!important}.react-datepicker__month{margin:.4rem!important;text-align:center!important}.react-datepicker__week{display:flex!important;justify-content:space-around!important}.react-datepicker__day{cursor:pointer!important;display:inline-block!important;width:2rem!important;line-height:2rem!important;text-align:center!important;margin:.166rem!important;color:hsl(var(--foreground))!important;border-radius:.375rem!important;font-size:.875rem!important;background:transparent!important;transition:all .15s ease-in-out!important}.react-datepicker__day:hover{background-color:hsl(var(--accent))!important;color:hsl(var(--accent-foreground))!important}.react-datepicker__day--selected{background-color:hsl(var(--primary))!important;color:hsl(var(--primary-foreground))!important;font-weight:600!important}.react-datepicker__day--selected:hover{background-color:hsl(var(--primary))!important;color:hsl(var(--primary-foreground))!important}.react-datepicker__day--today{background-color:hsl(var(--accent))!important;color:hsl(var(--accent-foreground))!important;font-weight:600!important}.react-datepicker__day--keyboard-selected{background-color:hsl(var(--accent))!important;color:hsl(var(--accent-foreground))!important}.react-datepicker__day--outside-month{color:hsl(var(--muted-foreground))!important;opacity:.5!important}.react-datepicker__day--disabled{cursor:not-allowed!important;opacity:.3!important;color:hsl(var(--muted-foreground))!important}.react-datepicker__day--disabled:hover{background-color:transparent!important}.react-datepicker__day--in-range{background-color:hsl(var(--primary) / .2)!important;color:hsl(var(--primary))!important}.react-datepicker__day--in-selecting-range:not(.react-datepicker__day--in-range){background-color:hsl(var(--primary) / .1)!important}.react-datepicker__day--range-start,.react-datepicker__day--range-end{background-color:hsl(var(--primary))!important;color:hsl(var(--primary-foreground))!important}.react-datepicker__time-container{float:right!important;border-left:1px solid hsl(var(--border))!important;width:85px!important}.react-datepicker__time{position:relative!important;background:hsl(var(--popover))!important;border-bottom-right-radius:.5rem!important}.react-datepicker__time-box{width:85px!important;overflow-x:hidden!important;margin:0 auto!important;text-align:center!important;border-bottom-right-radius:.5rem!important}.react-datepicker__time-list{height:calc(195px + .85rem)!important;overflow-y:scroll!important;margin:0!important;padding:0!important;list-style:none!important;background:hsl(var(--popover))!important}.react-datepicker__time-list-item{height:30px!important;padding:5px 10px!important;white-space:nowrap!important;cursor:pointer!important;color:hsl(var(--foreground))!important;font-size:.875rem!important}.react-datepicker__time-list-item:hover{background-color:hsl(var(--accent))!important;color:hsl(var(--accent-foreground))!important}.react-datepicker__time-list-item--selected{background-color:hsl(var(--primary))!important;color:hsl(var(--primary-foreground))!important;font-weight:600!important}.react-datepicker__time-list-item--disabled{color:hsl(var(--muted-foreground))!important;opacity:.3!important;cursor:not-allowed!important}.react-datepicker__time-list-item--disabled:hover{background-color:transparent!important}.react-datepicker__input-container input{width:100%!important;border-radius:.375rem!important;border:1px solid hsl(var(--input))!important;background-color:hsl(var(--background))!important;padding:.5rem .75rem!important;font-size:.875rem!important;line-height:1.25rem!important;color:hsl(var(--foreground))!important}.react-datepicker__input-container input:focus{outline:none!important;box-shadow:0 0 0 2px hsl(var(--ring))!important;border-color:hsl(var(--ring))!important}.react-datepicker__input-container input::placeholder{color:hsl(var(--muted-foreground))!important}.react-datepicker__input-container input:disabled{cursor:not-allowed!important;opacity:.5!important}.react-datepicker__week-number{color:hsl(var(--muted-foreground))!important;display:inline-block!important;width:2rem!important;line-height:2rem!important;text-align:center!important;margin:.166rem!important;font-weight:500!important;font-size:.75rem!important}.react-datepicker__month-dropdown,.react-datepicker__year-dropdown{background-color:hsl(var(--popover))!important;position:absolute!important;width:50%!important;left:25%!important;top:30px!important;z-index:1!important;text-align:center!important;border-radius:.5rem!important;border:1px solid hsl(var(--border))!important;box-shadow:0 10px 15px -3px #0000001a!important}.react-datepicker__month-option,.react-datepicker__year-option{line-height:20px!important;width:100%!important;display:block!important;padding:.5rem!important;cursor:pointer!important;color:hsl(var(--foreground))!important}.react-datepicker__month-option:hover,.react-datepicker__year-option:hover{background-color:hsl(var(--accent))!important;color:hsl(var(--accent-foreground))!important}.react-datepicker__month-option--selected_month,.react-datepicker__year-option--selected_year{background-color:hsl(var(--primary))!important;color:hsl(var(--primary-foreground))!important;font-weight:600!important}.react-datepicker__portal{position:fixed!important;width:100vw!important;height:100vh!important;background-color:#000c!important;left:0!important;top:0!important;justify-content:center!important;align-items:center!important;display:flex!important;z-index:2147483647!important}.react-datepicker__portal .react-datepicker{position:relative!important}.waka-datepicker-container{position:relative!important;display:block!important;width:100%!important}.waka-datepicker-container .react-datepicker-wrapper{display:block!important;width:100%!important}.waka-datepicker .highlighted-date{position:relative!important;background-color:hsl(var(--accent) / .5)!important;color:hsl(var(--accent-foreground))!important;font-weight:600!important}.waka-datepicker .highlighted-date:after{content:""!important;position:absolute!important;bottom:.25rem!important;left:50%!important;transform:translate(-50%)!important;width:.25rem!important;height:.25rem!important;border-radius:50%!important;background-color:hsl(var(--primary))!important}.waka-datepicker.no-animations *{transition:none!important;animation:none!important}.react-datepicker__month-container{float:left!important}.react-datepicker--time-only .react-datepicker__time-container{border-left:0!important}.react-datepicker--time-only .react-datepicker__time{border-radius:.5rem!important}.react-datepicker *{box-sizing:border-box!important}.react-datepicker button{border:none!important;cursor:pointer!important;background:transparent!important;padding:0!important}.waka-carousel{position:relative;overflow:hidden;border-radius:.5rem;background-color:#000;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.waka-carousel--fullscreen{position:fixed;inset:0;z-index:9999;border-radius:0;background-color:#000}.waka-carousel__image-container{position:relative;width:100%;height:100%;overflow:hidden}.waka-carousel__image{width:100%;height:100%;object-fit:cover;transition:opacity .3s ease-in-out,transform .3s ease-in-out;will-change:opacity,transform}.waka-carousel__overlay{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(to top,rgba(0,0,0,.8),transparent);padding:1.5rem;color:#fff;z-index:5}.waka-carousel__title{font-size:1.25rem;font-weight:600;margin-bottom:.5rem;color:#fff;line-height:1.3}.waka-carousel__description{font-size:.875rem;color:#ffffffe6;line-height:1.4;margin-bottom:.5rem}.waka-carousel__caption{font-size:.75rem;color:#fffc;font-style:italic}.waka-carousel__navigation{position:absolute;top:50%;transform:translateY(-50%);z-index:10;background:#0009;color:#fff;padding:.75rem;border-radius:50%;border:none;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.waka-carousel__navigation:hover{background:#000c;transform:translateY(-50%) scale(1.1)}.waka-carousel__navigation:focus{outline:2px solid rgba(255,255,255,.8);outline-offset:2px}.waka-carousel__navigation:active{transform:translateY(-50%) scale(.95)}.waka-carousel__navigation--prev{left:1rem}.waka-carousel__navigation--next{right:1rem}.waka-carousel__navigation--small{padding:.5rem}.waka-carousel__navigation--large{padding:1rem}.waka-carousel__control-button{position:absolute;top:1rem;z-index:10;background:#0009;color:#fff;padding:.5rem;border-radius:50%;border:none;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.waka-carousel__control-button:hover{background:#000c;transform:scale(1.1)}.waka-carousel__control-button:focus{outline:2px solid rgba(255,255,255,.8);outline-offset:2px}.waka-carousel__play-button{right:1rem}.waka-carousel__fullscreen-button{left:1rem}.waka-carousel__download-button{right:3.5rem}.waka-carousel__share-button{right:6rem}.waka-carousel__counter{position:absolute;top:1rem;left:50%;transform:translate(-50%);z-index:10;background:#0009;color:#fff;padding:.5rem 1rem;border-radius:1rem;font-size:.875rem;font-weight:500;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.waka-carousel__indicators{position:absolute;bottom:1rem;left:50%;transform:translate(-50%);display:flex;gap:.5rem;z-index:10}.waka-carousel__indicator{border:none;cursor:pointer;transition:all .2s ease;background:#ffffff80;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.waka-carousel__indicator:hover{background:#ffffffb3;transform:scale(1.1)}.waka-carousel__indicator:focus{outline:2px solid rgba(255,255,255,.8);outline-offset:2px}.waka-carousel__indicator--active{background:#fff}.waka-carousel__indicator--circle{width:.5rem;height:.5rem;border-radius:50%}.waka-carousel__indicator--square{width:.5rem;height:.5rem;border-radius:.125rem}.waka-carousel__indicator--diamond{width:.5rem;height:.5rem;border-radius:.125rem;transform:rotate(45deg)}.waka-carousel__indicator--line{height:.25rem;border-radius:.125rem}.waka-carousel__indicator--small{width:.375rem;height:.375rem}.waka-carousel__indicator--small.waka-carousel__indicator--line{width:1.5rem;height:.1875rem}.waka-carousel__indicator--medium{width:.5rem;height:.5rem}.waka-carousel__indicator--medium.waka-carousel__indicator--line{width:2rem;height:.25rem}.waka-carousel__indicator--large{width:.625rem;height:.625rem}.waka-carousel__indicator--large.waka-carousel__indicator--line{width:2.5rem;height:.3125rem}.waka-carousel__thumbnails{display:flex;gap:.5rem;padding:1rem;background-color:#f8fafc;overflow-x:auto;scrollbar-width:thin;scrollbar-color:#cbd5e1 #f1f5f9;border-top:1px solid #e2e8f0}.waka-carousel__thumbnails::-webkit-scrollbar{height:6px}.waka-carousel__thumbnails::-webkit-scrollbar-track{background:#f1f5f9;border-radius:3px}.waka-carousel__thumbnails::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px}.waka-carousel__thumbnails::-webkit-scrollbar-thumb:hover{background:#94a3b8}.waka-carousel__thumbnail{flex-shrink:0;border-radius:.375rem;overflow:hidden;border:2px solid #d1d5db;cursor:pointer;transition:all .2s ease;position:relative}.waka-carousel__thumbnail:hover{border-color:#9ca3af;transform:scale(1.05)}.waka-carousel__thumbnail:focus{outline:2px solid #3b82f6;outline-offset:2px}.waka-carousel__thumbnail--active{border-color:#3b82f6;box-shadow:0 0 0 1px #3b82f6}.waka-carousel__thumbnail--small{width:3rem;height:3rem}.waka-carousel__thumbnail--medium{width:4rem;height:4rem}.waka-carousel__thumbnail--large{width:5rem;height:5rem}.waka-carousel__thumbnail-image{width:100%;height:100%;object-fit:cover;transition:transform .2s ease}.waka-carousel__thumbnail:hover .waka-carousel__thumbnail-image{transform:scale(1.1)}.waka-carousel__progress{position:absolute;bottom:0;left:0;right:0;height:.25rem;background:#0000004d;z-index:5}.waka-carousel__progress-bar{height:100%;background:#fff;transition:width .1s ease;border-radius:0 .125rem .125rem 0}.waka-carousel__loading{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:20;background:#000000b3;color:#fff;padding:1rem;border-radius:.5rem;display:flex;align-items:center;justify-content:center;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.waka-carousel__spinner{width:2rem;height:2rem;border:2px solid rgba(255,255,255,.3);border-top:2px solid white;border-radius:50%;animation:spin 1s linear infinite}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideIn{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes slideOut{0%{transform:translate(0)}to{transform:translate(-100%)}}@keyframes zoomIn{0%{transform:scale(.8);opacity:0}to{transform:scale(1);opacity:1}}@keyframes flip{0%{transform:rotateY(0)}50%{transform:rotateY(90deg)}to{transform:rotateY(0)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.waka-carousel__image--fade{animation:fadeIn .3s ease-in-out}.waka-carousel__image--slide{animation:slideIn .3s ease-in-out}.waka-carousel__image--zoom{animation:zoomIn .3s ease-in-out}.waka-carousel__image--flip{animation:flip .6s ease-in-out}.waka-carousel:focus-within{outline:2px solid #3b82f6;outline-offset:2px}.waka-carousel__navigation:focus-visible,.waka-carousel__control-button:focus-visible,.waka-carousel__indicator:focus-visible,.waka-carousel__thumbnail:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}@media (max-width: 768px){.waka-carousel__navigation{padding:.5rem}.waka-carousel__navigation svg{width:1rem;height:1rem}.waka-carousel__control-button{padding:.375rem}.waka-carousel__control-button svg{width:.875rem;height:.875rem}.waka-carousel__thumbnails{padding:.75rem}.waka-carousel__thumbnail--small{width:2.5rem;height:2.5rem}.waka-carousel__thumbnail--medium{width:3rem;height:3rem}.waka-carousel__thumbnail--large{width:3.5rem;height:3.5rem}.waka-carousel__overlay{padding:1rem}.waka-carousel__title{font-size:1rem}.waka-carousel__description{font-size:.8125rem}}@media (max-width: 480px){.waka-carousel__navigation{padding:.375rem}.waka-carousel__navigation--prev{left:.5rem}.waka-carousel__navigation--next{right:.5rem}.waka-carousel__control-button{padding:.25rem}.waka-carousel__control-button svg{width:.75rem;height:.75rem}.waka-carousel__download-button{right:2.5rem}.waka-carousel__share-button{right:4.5rem}}@media (prefers-color-scheme: dark){.waka-carousel__thumbnails{background-color:#1f2937;border-top-color:#374151}.waka-carousel__thumbnail{border-color:#374151}.waka-carousel__thumbnail:hover{border-color:#4b5563}.waka-carousel__thumbnail--active{border-color:#3b82f6;box-shadow:0 0 0 1px #3b82f6}}.waka-carousel.dark .waka-carousel__thumbnails{background-color:#1f2937;border-top-color:#374151}.waka-carousel.dark .waka-carousel__thumbnail{border-color:#374151}.waka-carousel.dark .waka-carousel__thumbnail:hover{border-color:#4b5563}.waka-carousel.dark .waka-carousel__thumbnail--active{border-color:#3b82f6;box-shadow:0 0 0 1px #3b82f6}@media (prefers-reduced-motion: reduce){.waka-carousel__image,.waka-carousel__navigation,.waka-carousel__control-button,.waka-carousel__indicator,.waka-carousel__thumbnail,.waka-carousel__progress-bar{transition:none;animation:none}}.waka-carousel__image{will-change:opacity,transform}.waka-carousel__navigation,.waka-carousel__control-button,.waka-carousel__indicator,.waka-carousel__thumbnail{will-change:transform,background-color}.waka-carousel[data-theme=light]{background-color:#fff}.waka-carousel[data-theme=dark]{background-color:#000}.waka-carousel__error{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:20;background:#ef4444e6;color:#fff;padding:1rem;border-radius:.5rem;text-align:center;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.waka-carousel[aria-hidden=true]{display:none}.waka-carousel__sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
@@ -0,0 +1 @@
1
+ export declare const cn: (...inputs: any[]) => string;
@@ -0,0 +1,137 @@
1
+ import { DatePreset, DateRange } from '../components/waka-datetime-picker';
2
+ /**
3
+ * Créer des presets de dates courantes
4
+ */
5
+ export declare const createCommonPresets: (locale?: import('date-fns').Locale) => DatePreset[];
6
+ /**
7
+ * Créer des presets pour les 7, 30, 90 derniers jours
8
+ */
9
+ export declare const createLastDaysPresets: () => DatePreset[];
10
+ /**
11
+ * Créer des presets pour les N prochains jours
12
+ */
13
+ export declare const createNextDaysPresets: (days: number[]) => DatePreset[];
14
+ /**
15
+ * Créer un preset personnalisé
16
+ */
17
+ export declare const createCustomPreset: (label: string, dateOrRange: Date | DateRange | (() => Date) | (() => DateRange)) => DatePreset;
18
+ /**
19
+ * Validation : date dans le futur
20
+ */
21
+ export declare const isFutureDate: (date: Date) => boolean;
22
+ /**
23
+ * Validation : date dans le passé
24
+ */
25
+ export declare const isPastDate: (date: Date) => boolean;
26
+ /**
27
+ * Validation : date est aujourd'hui
28
+ */
29
+ export declare const isToday: (date: Date) => boolean;
30
+ /**
31
+ * Validation : date est un jour de semaine (lundi-vendredi)
32
+ */
33
+ export declare const isWeekday: (date: Date) => boolean;
34
+ /**
35
+ * Validation : date est un weekend (samedi-dimanche)
36
+ */
37
+ export declare const isWeekend: (date: Date) => boolean;
38
+ /**
39
+ * Validation : date est dans une liste de jours fériés
40
+ */
41
+ export declare const isHoliday: (date: Date, holidays: Date[]) => boolean;
42
+ /**
43
+ * Validation : date est dans un intervalle
44
+ */
45
+ export declare const isDateInRange: (date: Date, start: Date, end: Date) => boolean;
46
+ /**
47
+ * Validation : âge minimum
48
+ */
49
+ export declare const createMinAgeValidator: (minAge: number) => (birthdate: Date) => boolean | string;
50
+ /**
51
+ * Validation : âge maximum
52
+ */
53
+ export declare const createMaxAgeValidator: (maxAge: number) => (birthdate: Date) => boolean | string;
54
+ /**
55
+ * Validation : date d'expiration
56
+ */
57
+ export declare const isNotExpired: (date: Date) => boolean | string;
58
+ /**
59
+ * Calculer la durée entre deux dates
60
+ */
61
+ export declare const calculateDuration: (from: Date, to: Date) => {
62
+ days: number;
63
+ weeks: number;
64
+ months: number;
65
+ };
66
+ /**
67
+ * Formater une range de dates
68
+ */
69
+ export declare const formatDateRange: (range: DateRange, formatStr?: string, locale?: import('date-fns').Locale) => string;
70
+ /**
71
+ * Obtenir les jours fériés français pour une année
72
+ */
73
+ export declare const getFrenchHolidays: (year: number) => Date[];
74
+ /**
75
+ * Obtenir les dates d'un mois
76
+ */
77
+ export declare const getDatesInMonth: (year: number, month: number) => Date[];
78
+ /**
79
+ * Obtenir tous les weekends d'un mois
80
+ */
81
+ export declare const getWeekendsInMonth: (year: number, month: number) => Date[];
82
+ /**
83
+ * Obtenir tous les jours de semaine d'un mois
84
+ */
85
+ export declare const getWeekdaysInMonth: (year: number, month: number) => Date[];
86
+ /**
87
+ * Créer un validateur de date d'expiration de carte bancaire
88
+ */
89
+ export declare const createCardExpiryValidator: () => (date: Date) => boolean | string;
90
+ /**
91
+ * Créer un validateur de date de réservation (X jours d'avance minimum)
92
+ */
93
+ export declare const createBookingDateValidator: (minDaysInAdvance: number) => (date: Date) => boolean | string;
94
+ /**
95
+ * Créer un validateur de plage de dates maximum
96
+ */
97
+ export declare const createMaxRangeDaysValidator: (maxDays: number) => (range: DateRange) => boolean | string;
98
+ /**
99
+ * Vérifier si deux dates sont le même jour
100
+ */
101
+ export declare const isSameDay: (date1: Date, date2: Date) => boolean;
102
+ /**
103
+ * Obtenir le nombre de jours ouvrés entre deux dates
104
+ */
105
+ export declare const getWorkingDays: (from: Date, to: Date, holidays?: Date[]) => number;
106
+ /**
107
+ * Créer des presets pour les trimestres
108
+ */
109
+ export declare const createQuarterPresets: (year?: number) => DatePreset[];
110
+ /**
111
+ * Créer des presets pour les mois de l'année
112
+ */
113
+ export declare const createMonthlyPresets: (year?: number, locale?: import('date-fns').Locale) => DatePreset[];
114
+ /**
115
+ * Convertir une date en timestamp
116
+ */
117
+ export declare const dateToTimestamp: (date: Date) => number;
118
+ /**
119
+ * Convertir un timestamp en date
120
+ */
121
+ export declare const timestampToDate: (timestamp: number) => Date;
122
+ /**
123
+ * Normaliser une date (début de journée)
124
+ */
125
+ export declare const normalizeDate: (date: Date) => Date;
126
+ /**
127
+ * Comparer deux ranges de dates
128
+ */
129
+ export declare const compareRanges: (range1: DateRange, range2: DateRange) => boolean;
130
+ /**
131
+ * Merger deux ranges de dates
132
+ */
133
+ export declare const mergeRanges: (range1: DateRange, range2: DateRange) => DateRange | null;
134
+ /**
135
+ * Vérifier si deux ranges se chevauchent
136
+ */
137
+ export declare const rangesOverlap: (range1: DateRange, range2: DateRange) => boolean;
@@ -0,0 +1,5 @@
1
+ export { cn } from './cn';
2
+ export { tweak, type VariantProps } from './tweak';
3
+ export * from './datetime-helpers';
4
+ export { ThemeLoader, initThemeLoader, getThemeLoader, loadTheme, applyTheme, useThemeLoader } from './theme-loader';
5
+ export type { ThemeLoaderConfig } from './theme-loader';
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Theme Loader pour charger dynamiquement les thèmes depuis S3 ou toute URL
3
+ *
4
+ * Supporte tous les formats de couleurs (hex, rgb, hsl, oklch, etc.)
5
+ * grâce au système TweakCN avec @theme inline
6
+ */
7
+ export interface ThemeLoaderConfig {
8
+ /**
9
+ * URL de base où les thèmes sont stockés (S3, CDN, etc.)
10
+ */
11
+ baseUrl: string;
12
+ /**
13
+ * Cache les thèmes déjà chargés pour éviter les requêtes répétées
14
+ */
15
+ cache?: boolean;
16
+ /**
17
+ * Timeout en millisecondes pour le chargement d'un thème
18
+ */
19
+ timeout?: number;
20
+ /**
21
+ * Callback appelé en cas d'erreur de chargement
22
+ */
23
+ onError?: (error: Error, themeName: string) => void;
24
+ /**
25
+ * Callback appelé une fois le thème chargé avec succès
26
+ */
27
+ onSuccess?: (themeName: string) => void;
28
+ }
29
+ declare class ThemeLoader {
30
+ private config;
31
+ private loadedThemes;
32
+ private styleElements;
33
+ constructor(config: ThemeLoaderConfig);
34
+ /**
35
+ * Charge un thème depuis une URL
36
+ */
37
+ loadTheme(themeName: string): Promise<void>;
38
+ /**
39
+ * Applique un thème déjà chargé
40
+ */
41
+ applyTheme(themeName: string): void;
42
+ /**
43
+ * Récupère le thème actuellement appliqué
44
+ */
45
+ getCurrentTheme(): string | null;
46
+ /**
47
+ * Charge le dernier thème utilisé depuis localStorage
48
+ */
49
+ loadSavedTheme(): string | null;
50
+ /**
51
+ * Précharge plusieurs thèmes en parallèle
52
+ */
53
+ preloadThemes(themeNames: string[]): Promise<void>;
54
+ /**
55
+ * Supprime un thème du cache et du DOM
56
+ */
57
+ unloadTheme(themeName: string): void;
58
+ /**
59
+ * Vide complètement le cache
60
+ */
61
+ clearCache(): void;
62
+ /**
63
+ * Liste tous les thèmes chargés
64
+ */
65
+ getLoadedThemes(): string[];
66
+ /**
67
+ * Construit l'URL complète d'un thème
68
+ */
69
+ private buildThemeUrl;
70
+ /**
71
+ * Injecte les styles d'un thème dans le document
72
+ */
73
+ private injectThemeStyles;
74
+ }
75
+ /**
76
+ * Initialise le theme loader avec une configuration
77
+ */
78
+ export declare function initThemeLoader(config: ThemeLoaderConfig): ThemeLoader;
79
+ /**
80
+ * Récupère l'instance globale du theme loader
81
+ */
82
+ export declare function getThemeLoader(): ThemeLoader;
83
+ /**
84
+ * Charge un thème depuis l'instance globale
85
+ */
86
+ export declare function loadTheme(themeName: string): Promise<void>;
87
+ /**
88
+ * Applique un thème depuis l'instance globale
89
+ */
90
+ export declare function applyTheme(themeName: string): void;
91
+ /**
92
+ * Hook React pour charger des thèmes dynamiquement
93
+ */
94
+ export declare function useThemeLoader(config?: Partial<ThemeLoaderConfig>): {
95
+ loadTheme: (themeName: string) => Promise<void>;
96
+ applyTheme: (themeName: string) => void;
97
+ currentTheme: string | null;
98
+ loadedThemes: string[];
99
+ isLoading: boolean;
100
+ };
101
+ export { ThemeLoader };
@@ -0,0 +1,18 @@
1
+ import { ClassValue } from 'clsx';
2
+ import { VariantProps } from 'class-variance-authority';
3
+ export type ConfigVariants<T> = T extends Record<string, Record<string, string>> ? {
4
+ [K in keyof T]?: keyof T[K];
5
+ } : never;
6
+ export type ClassProp = {
7
+ class?: ClassValue;
8
+ className?: ClassValue;
9
+ };
10
+ export declare function tweak(...inputs: ClassValue[]): string;
11
+ export declare namespace tweak {
12
+ var variants: <T extends Record<string, Record<string, string>>, Defaults extends Partial<Record<keyof T, string>> = {}>(config: {
13
+ base?: string;
14
+ variants?: T;
15
+ defaultVariants?: Defaults;
16
+ }) => (options?: (ConfigVariants<T> & ClassProp)) => string;
17
+ }
18
+ export type { VariantProps };
package/package.json ADDED
@@ -0,0 +1,118 @@
1
+ {
2
+ "name": "@wakastellar/ui",
3
+ "version": "0.1.0",
4
+ "description": "UI Library compatible TweakCN + i18n pour Next.js",
5
+ "keywords": ["ui", "interfaces"],
6
+ "publisher": "wakastellar",
7
+ "displayName": "Wakastellar - UI",
8
+ "main": "./dist/index.cjs.js",
9
+ "module": "./dist/index.es.js",
10
+ "types": "./dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.es.js",
15
+ "require": "./dist/index.cjs.js"
16
+ },
17
+ "./styles": "./src/styles/globals.css",
18
+ "./styles/*": "./src/styles/*.css"
19
+ },
20
+ "files": [
21
+ "dist",
22
+ "src/styles"
23
+ ],
24
+ "scripts": {
25
+ "dev": "vite build --watch --mode development",
26
+ "build": "vite build",
27
+ "demo": "cd demo && pnpm dev",
28
+ "lint": "eslint . --ext .ts,.tsx",
29
+ "test": "vitest --config vitest.config.unit.ts",
30
+ "test:watch": "vitest --config vitest.config.unit.ts --watch",
31
+ "test:coverage": "vitest --config vitest.config.unit.ts --coverage",
32
+ "test:ui": "vitest --config vitest.config.unit.ts --ui"
33
+ },
34
+ "dependencies": {
35
+ "@radix-ui/react-accordion": "^1.1.2",
36
+ "@radix-ui/react-alert-dialog": "^1.0.5",
37
+ "@radix-ui/react-aspect-ratio": "^1.0.3",
38
+ "@radix-ui/react-avatar": "^1.0.4",
39
+ "@radix-ui/react-checkbox": "^1.0.4",
40
+ "@radix-ui/react-collapsible": "^1.0.3",
41
+ "@radix-ui/react-context-menu": "^2.1.5",
42
+ "@radix-ui/react-dialog": "^1.0.5",
43
+ "@radix-ui/react-dropdown-menu": "^2.0.6",
44
+ "@radix-ui/react-hover-card": "^1.0.7",
45
+ "@radix-ui/react-label": "^2.0.2",
46
+ "@radix-ui/react-menubar": "^1.0.4",
47
+ "@radix-ui/react-navigation-menu": "^1.1.4",
48
+ "@radix-ui/react-popover": "^1.0.7",
49
+ "@radix-ui/react-progress": "^1.0.3",
50
+ "@radix-ui/react-radio-group": "^1.1.3",
51
+ "@radix-ui/react-scroll-area": "^1.0.5",
52
+ "@radix-ui/react-select": "^2.0.0",
53
+ "@radix-ui/react-separator": "^1.0.3",
54
+ "@radix-ui/react-slider": "^1.1.2",
55
+ "@radix-ui/react-slot": "^1.0.2",
56
+ "@radix-ui/react-switch": "^1.0.3",
57
+ "@radix-ui/react-tabs": "^1.0.4",
58
+ "@radix-ui/react-toast": "^1.1.5",
59
+ "@radix-ui/react-toggle": "^1.0.3",
60
+ "@radix-ui/react-tooltip": "^1.0.7",
61
+ "@tanstack/react-table": "^8.21.3",
62
+ "@tanstack/react-virtual": "^3.13.12",
63
+ "@types/prismjs": "^1.26.5",
64
+ "class-variance-authority": "^0.7.1",
65
+ "clsx": "^2.1.1",
66
+ "cmdk": "^0.2.0",
67
+ "date-fns": "^4.1.0",
68
+ "i18next": "^23.7.0",
69
+ "lucide-react": "^0.293.0",
70
+ "next-i18next": "^15.2.0",
71
+ "prismjs": "^1.30.0",
72
+ "react": ">=19.1.0",
73
+ "react-datepicker": "^8.7.0",
74
+ "react-day-picker": "^9.11.1",
75
+ "react-dom": ">=18.0.0",
76
+ "react-i18next": "^13.2.0",
77
+ "tailwind-merge": "^3.3.1",
78
+ "tailwind-variants": "^0.1.18"
79
+ },
80
+ "peerDependencies": {
81
+ "next": ">=15.5.4",
82
+ "react": ">=19.1.0",
83
+ "react-dom": ">=18.0.0",
84
+ "react-hook-form": "^7.0.0"
85
+ },
86
+ "devDependencies": {
87
+ "@chromatic-com/storybook": "^4.1.1",
88
+ "@testing-library/jest-dom": "^6.1.5",
89
+ "@testing-library/react": "^14.1.2",
90
+ "@testing-library/user-event": "^14.5.1",
91
+ "@types/node": "^24.7.2",
92
+ "@types/react": "^18.3.26",
93
+ "@types/react-datepicker": "^7.0.0",
94
+ "@types/react-dom": "^18.3.5",
95
+ "@vitejs/plugin-react": "^4.2.1",
96
+ "@vitest/browser": "^3.2.4",
97
+ "@vitest/coverage-v8": "^3.2.4",
98
+ "@vitest/ui": "^3.2.4",
99
+ "autoprefixer": "^10.4.16",
100
+ "jsdom": "^23.0.1",
101
+ "playwright": "^1.56.0",
102
+ "postcss": "^8.4.31",
103
+ "react-hook-form": "^7.49.2",
104
+ "storybook": "^9.1.10",
105
+ "tailwindcss": "^3.4.0",
106
+ "tailwindcss-animate": "^1.0.7",
107
+ "typescript": "^5.5.0",
108
+ "vite": "^7.1.9",
109
+ "vite-plugin-dts": "^4.5.4",
110
+ "vitest": "^3.2.4"
111
+ },
112
+ "pnpm": {
113
+ "overrides": {
114
+ "@types/react": "^18.3.26",
115
+ "@types/react-dom": "^18.3.5"
116
+ }
117
+ }
118
+ }