@ews-admin/global-design-system 1.0.0 → 1.1.1
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/README.md +50 -1
- package/dist/components/Button/Button.d.ts.map +1 -1
- package/dist/components/Input/Input.d.ts +4 -0
- package/dist/components/Input/Input.d.ts.map +1 -1
- package/dist/components/Logo/Logo.d.ts +29 -0
- package/dist/components/Logo/Logo.d.ts.map +1 -0
- package/dist/components/Logo/index.d.ts +3 -0
- package/dist/components/Logo/index.d.ts.map +1 -0
- package/dist/components/Modal/Modal.d.ts +72 -0
- package/dist/components/Modal/Modal.d.ts.map +1 -0
- package/dist/components/Modal/index.d.ts +3 -0
- package/dist/components/Modal/index.d.ts.map +1 -0
- package/dist/components/MultiSearchAutocomplete/MultiSearchAutocomplete.d.ts +25 -0
- package/dist/components/MultiSearchAutocomplete/MultiSearchAutocomplete.d.ts.map +1 -0
- package/dist/components/MultiSearchAutocomplete/index.d.ts +2 -0
- package/dist/components/MultiSearchAutocomplete/index.d.ts.map +1 -0
- package/dist/components/SearchAutocomplete/SearchAutocomplete.d.ts +22 -0
- package/dist/components/SearchAutocomplete/SearchAutocomplete.d.ts.map +1 -0
- package/dist/components/SearchAutocomplete/index.d.ts +3 -0
- package/dist/components/SearchAutocomplete/index.d.ts.map +1 -0
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/useDebounce.d.ts +15 -0
- package/dist/hooks/useDebounce.d.ts.map +1 -0
- package/dist/icons/Icon.d.ts +5 -4
- package/dist/icons/Icon.d.ts.map +1 -1
- package/dist/icons/index.d.ts +1 -3
- package/dist/icons/index.d.ts.map +1 -1
- package/dist/index.css +3 -1
- package/dist/index.d.ts +185 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.css +3 -1
- package/dist/index.esm.js +763 -29
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +768 -27
- package/dist/index.js.map +1 -1
- package/dist/molecules/SpecialtySearchAutocomplete/SpecialtySearchAutocomplete.d.ts +18 -0
- package/dist/molecules/SpecialtySearchAutocomplete/SpecialtySearchAutocomplete.d.ts.map +1 -0
- package/dist/molecules/SpecialtySearchAutocomplete/index.d.ts +3 -0
- package/dist/molecules/SpecialtySearchAutocomplete/index.d.ts.map +1 -0
- package/dist/molecules/index.d.ts +3 -0
- package/dist/molecules/index.d.ts.map +1 -0
- package/dist/utils/index.d.ts +5 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/package.json +17 -2
- package/src/assets/favicon.svg +6 -0
- package/src/assets/logo.svg +17 -0
- package/src/components/Button/Button.tsx +22 -8
- package/src/components/Input/Input.tsx +42 -16
- package/src/components/Logo/Logo.tsx +100 -0
- package/src/components/Logo/index.ts +2 -0
- package/src/components/Modal/Modal.tsx +257 -0
- package/src/components/Modal/index.ts +2 -0
- package/src/components/MultiSearchAutocomplete/MultiSearchAutocomplete.tsx +319 -0
- package/src/components/MultiSearchAutocomplete/index.ts +1 -0
- package/src/components/SearchAutocomplete/SearchAutocomplete.tsx +315 -0
- package/src/components/SearchAutocomplete/index.ts +2 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useDebounce.ts +64 -0
- package/src/icons/Icon.tsx +15 -16
- package/src/icons/index.ts +39 -3
- package/src/index.ts +19 -0
- package/src/molecules/SpecialtySearchAutocomplete/SpecialtySearchAutocomplete.tsx +203 -0
- package/src/molecules/SpecialtySearchAutocomplete/index.ts +5 -0
- package/src/molecules/index.ts +5 -0
- package/src/styles/index.css +8 -5
- package/src/styles/tailwind.css +3 -0
- package/src/utils/index.ts +7 -2
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
3
|
+
import { LucideIcon, LucideProps } from 'lucide-react';
|
|
4
|
+
export { ArrowRight, Check, Search } from 'lucide-react';
|
|
2
5
|
import { ClassValue } from 'clsx';
|
|
3
6
|
|
|
4
7
|
interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
@@ -62,26 +65,181 @@ interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "
|
|
|
62
65
|
* Whether the input should take full width
|
|
63
66
|
*/
|
|
64
67
|
fullWidth?: boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Whether to show password toggle for password inputs
|
|
70
|
+
*/
|
|
71
|
+
showPasswordToggle?: boolean;
|
|
65
72
|
}
|
|
66
73
|
declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
|
|
67
74
|
|
|
68
|
-
interface
|
|
75
|
+
interface SearchableEntity {
|
|
76
|
+
id: string;
|
|
77
|
+
[key: string]: string | number | boolean | undefined;
|
|
78
|
+
}
|
|
79
|
+
interface SearchAutocompleteProps<T extends SearchableEntity> {
|
|
80
|
+
onSelect: (id: string) => void;
|
|
81
|
+
selectedId: string;
|
|
82
|
+
searchFunction: (keyword: string) => Promise<T[]>;
|
|
83
|
+
getEntityById?: (id: string) => Promise<T | undefined>;
|
|
84
|
+
getDisplayValue: (entity: T) => string;
|
|
85
|
+
getSecondaryText?: (entity: T) => string | null;
|
|
86
|
+
placeholder: string;
|
|
87
|
+
icon?: LucideIcon;
|
|
88
|
+
disabled?: boolean;
|
|
89
|
+
minSearchLength?: number;
|
|
90
|
+
debounceTime?: number;
|
|
91
|
+
error?: string;
|
|
92
|
+
}
|
|
93
|
+
declare function SearchAutocomplete<T extends SearchableEntity>({ onSelect, selectedId, searchFunction, getEntityById, getDisplayValue, getSecondaryText, placeholder, icon, disabled, minSearchLength, debounceTime, error, }: SearchAutocompleteProps<T>): react_jsx_runtime.JSX.Element;
|
|
94
|
+
|
|
95
|
+
interface MultiSearchAutocompleteProps<T extends SearchableEntity> {
|
|
96
|
+
items: T[];
|
|
97
|
+
selectedItems: T[];
|
|
98
|
+
onSelectionChange: (items: T[]) => void;
|
|
99
|
+
onSearch: (searchTerm: string) => Promise<void>;
|
|
100
|
+
getEntityById?: (id: string) => Promise<T | undefined>;
|
|
101
|
+
getPrimaryText: (entity: T) => string;
|
|
102
|
+
getSecondaryText?: (entity: T) => string | null;
|
|
103
|
+
placeholder: string;
|
|
104
|
+
disabled?: boolean;
|
|
105
|
+
loading?: boolean;
|
|
106
|
+
multiple?: boolean;
|
|
107
|
+
className?: string;
|
|
108
|
+
renderSelectedItem?: (entity: T) => React.ReactNode;
|
|
109
|
+
renderListItem?: (entity: T, isSelected: boolean) => React.ReactNode;
|
|
110
|
+
keepOpenOnSelect?: boolean;
|
|
111
|
+
error?: string;
|
|
112
|
+
minSearchLength?: number;
|
|
113
|
+
debounceTime?: number;
|
|
114
|
+
}
|
|
115
|
+
declare function MultiSearchAutocomplete<T extends SearchableEntity>({ items, selectedItems, onSelectionChange, onSearch, getEntityById, getPrimaryText, getSecondaryText, placeholder, disabled, loading, multiple, className, renderSelectedItem, renderListItem, keepOpenOnSelect, error, minSearchLength, debounceTime, }: MultiSearchAutocompleteProps<T>): react_jsx_runtime.JSX.Element;
|
|
116
|
+
|
|
117
|
+
interface ErrorField {
|
|
118
|
+
name: string;
|
|
119
|
+
message: string;
|
|
120
|
+
path: string;
|
|
121
|
+
}
|
|
122
|
+
interface ErrorObject {
|
|
123
|
+
code: string;
|
|
124
|
+
message: string;
|
|
125
|
+
fields: ErrorField[];
|
|
126
|
+
}
|
|
127
|
+
interface ModalProps {
|
|
69
128
|
/**
|
|
70
|
-
*
|
|
129
|
+
* Whether the modal is open
|
|
71
130
|
*/
|
|
72
|
-
|
|
131
|
+
isOpen: boolean;
|
|
132
|
+
/**
|
|
133
|
+
* Function to call when modal should be closed
|
|
134
|
+
*/
|
|
135
|
+
onClose: () => void;
|
|
136
|
+
/**
|
|
137
|
+
* Modal title
|
|
138
|
+
*/
|
|
139
|
+
title: string;
|
|
140
|
+
/**
|
|
141
|
+
* Modal content/description
|
|
142
|
+
*/
|
|
143
|
+
children: React.ReactNode;
|
|
144
|
+
/**
|
|
145
|
+
* Modal variant
|
|
146
|
+
*/
|
|
147
|
+
variant?: "error" | "warning" | "confirmation" | "info";
|
|
148
|
+
/**
|
|
149
|
+
* Primary action button text
|
|
150
|
+
*/
|
|
151
|
+
primaryAction?: string;
|
|
152
|
+
/**
|
|
153
|
+
* Secondary action button text
|
|
154
|
+
*/
|
|
155
|
+
secondaryAction?: string;
|
|
156
|
+
/**
|
|
157
|
+
* Function to call when primary action is clicked
|
|
158
|
+
*/
|
|
159
|
+
onPrimaryAction?: () => void;
|
|
160
|
+
/**
|
|
161
|
+
* Function to call when secondary action is clicked
|
|
162
|
+
*/
|
|
163
|
+
onSecondaryAction?: () => void;
|
|
164
|
+
/**
|
|
165
|
+
* Whether the primary action button is loading
|
|
166
|
+
*/
|
|
167
|
+
isLoading?: boolean;
|
|
168
|
+
/**
|
|
169
|
+
* Whether the modal can be closed by clicking outside or pressing escape
|
|
170
|
+
*/
|
|
171
|
+
closeOnOverlayClick?: boolean;
|
|
73
172
|
/**
|
|
74
|
-
*
|
|
173
|
+
* Custom className for the modal
|
|
75
174
|
*/
|
|
76
|
-
|
|
175
|
+
className?: string;
|
|
176
|
+
/**
|
|
177
|
+
* Custom className for the content
|
|
178
|
+
*/
|
|
179
|
+
contentClassName?: string;
|
|
180
|
+
/**
|
|
181
|
+
* Error object for error modals
|
|
182
|
+
*/
|
|
183
|
+
error?: ErrorObject;
|
|
77
184
|
}
|
|
78
|
-
declare const
|
|
185
|
+
declare const Modal: ({ isOpen, onClose, title, children, variant, primaryAction, secondaryAction, onPrimaryAction, onSecondaryAction, isLoading, closeOnOverlayClick, className, contentClassName, error, }: ModalProps) => react_jsx_runtime.JSX.Element | null;
|
|
79
186
|
|
|
80
|
-
|
|
187
|
+
interface LogoProps {
|
|
188
|
+
/**
|
|
189
|
+
* Logo size
|
|
190
|
+
*/
|
|
191
|
+
size?: "sm" | "md" | "lg" | "xl";
|
|
192
|
+
/**
|
|
193
|
+
* Whether to show the tagline
|
|
194
|
+
*/
|
|
195
|
+
showTagline?: boolean;
|
|
196
|
+
/**
|
|
197
|
+
* Whether to show only the icon (favicon version)
|
|
198
|
+
*/
|
|
199
|
+
iconOnly?: boolean;
|
|
200
|
+
/**
|
|
201
|
+
* Logo variant - normal, white, or favicon
|
|
202
|
+
*/
|
|
203
|
+
variant?: "normal" | "white" | "favicon";
|
|
204
|
+
/**
|
|
205
|
+
* Custom className
|
|
206
|
+
*/
|
|
207
|
+
className?: string;
|
|
208
|
+
/**
|
|
209
|
+
* Click handler
|
|
210
|
+
*/
|
|
211
|
+
onClick?: () => void;
|
|
212
|
+
}
|
|
213
|
+
declare const Logo: ({ size, showTagline, iconOnly, variant, className, onClick, }: LogoProps) => react_jsx_runtime.JSX.Element;
|
|
81
214
|
|
|
82
|
-
|
|
215
|
+
interface Specialty {
|
|
216
|
+
id: string;
|
|
217
|
+
code: string;
|
|
218
|
+
label: string;
|
|
219
|
+
[key: string]: string | number | boolean | undefined;
|
|
220
|
+
}
|
|
221
|
+
interface SpecialtySearchAutocompleteProps {
|
|
222
|
+
selectedSpecialties: Specialty[];
|
|
223
|
+
onSpecialtiesChange: (specialties: Specialty[]) => void;
|
|
224
|
+
placeholder?: string;
|
|
225
|
+
className?: string;
|
|
226
|
+
disabled?: boolean;
|
|
227
|
+
maxSelections?: number;
|
|
228
|
+
showSelectedCount?: boolean;
|
|
229
|
+
}
|
|
230
|
+
declare const SpecialtySearchAutocomplete: React.FC<SpecialtySearchAutocompleteProps>;
|
|
83
231
|
|
|
84
|
-
|
|
232
|
+
interface IconProps extends Omit<LucideProps, "size"> {
|
|
233
|
+
/**
|
|
234
|
+
* Icon size
|
|
235
|
+
*/
|
|
236
|
+
size?: "sm" | "md" | "lg" | "xl" | number;
|
|
237
|
+
/**
|
|
238
|
+
* The Lucide icon component to render
|
|
239
|
+
*/
|
|
240
|
+
icon: React.ComponentType<LucideProps>;
|
|
241
|
+
}
|
|
242
|
+
declare const Icon: React.ForwardRefExoticComponent<Omit<IconProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
85
243
|
|
|
86
244
|
/**
|
|
87
245
|
* Utility function to merge class names
|
|
@@ -92,7 +250,7 @@ declare function cn(...inputs: ClassValue[]): string;
|
|
|
92
250
|
/**
|
|
93
251
|
* Utility function to format currency
|
|
94
252
|
* @param amount - Amount to format
|
|
95
|
-
* @param currency - Currency code (default:
|
|
253
|
+
* @param currency - Currency code (default: CURRENCY constant)
|
|
96
254
|
* @returns Formatted currency string
|
|
97
255
|
*/
|
|
98
256
|
declare function formatCurrency(amount: number, currency?: string): string;
|
|
@@ -117,5 +275,20 @@ declare function debounce<T extends (...args: any[]) => any>(func: T, wait: numb
|
|
|
117
275
|
*/
|
|
118
276
|
declare function generateId(prefix?: string): string;
|
|
119
277
|
|
|
120
|
-
|
|
121
|
-
|
|
278
|
+
/**
|
|
279
|
+
* A custom hook that debounces a value
|
|
280
|
+
* @param value - The value to debounce
|
|
281
|
+
* @param delay - The delay in milliseconds (optional, defaults to 300ms)
|
|
282
|
+
* @returns The debounced value
|
|
283
|
+
*/
|
|
284
|
+
declare function useDebounce<T>(value: T, delay?: number): T;
|
|
285
|
+
/**
|
|
286
|
+
* A custom hook that provides a debounced callback function
|
|
287
|
+
* @param callback - The function to debounce
|
|
288
|
+
* @param delay - The delay in milliseconds (optional, defaults to 300ms)
|
|
289
|
+
* @returns A debounced version of the callback
|
|
290
|
+
*/
|
|
291
|
+
declare function useDebouncedCallback<T extends (...args: unknown[]) => unknown>(callback: T, delay?: number): T;
|
|
292
|
+
|
|
293
|
+
export { Button, Icon, Input, Logo, Modal, MultiSearchAutocomplete, SearchAutocomplete, SpecialtySearchAutocomplete, cn, debounce, formatCurrency, formatDate, generateId, useDebounce, useDebouncedCallback };
|
|
294
|
+
export type { ButtonProps, ErrorField, ErrorObject, IconProps, InputProps, LogoProps, ModalProps, SearchableEntity, Specialty, SpecialtySearchAutocompleteProps };
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAExE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAE/E,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE9E,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC1D,YAAY,EAAE,SAAS,EAAE,gCAAgC,EAAE,MAAM,aAAa,CAAC;AAG/E,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC1D,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGzC,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG/E,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAG5D,OAAO,oBAAoB,CAAC;AAC5B,OAAO,uBAAuB,CAAC"}
|
package/dist/index.esm.css
CHANGED
|
@@ -1 +1,3 @@
|
|
|
1
|
-
|
|
1
|
+
/* ! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com */:root{--ews-primary:#21596c;--ews-primary-hover:#1a4756;--ews-primary-light:#c0d0d4;--ews-secondary:#3ba1a1;--ews-secondary-hover:#308181;--ews-success:#059669;--ews-success-hover:#047857;--ews-warning:#d97706;--ews-warning-hover:#b45309;--ews-error:#dc2626;--ews-error-hover:#b91c1c;--ews-white:#fff;--ews-gray-50:#f8fafc;--ews-gray-100:#f1f5f9;--ews-gray-200:#e2e8f0;--ews-gray-300:#cbd5e1;--ews-gray-400:#94a3b8;--ews-gray-500:#64748b;--ews-gray-600:#475569;--ews-gray-700:#334155;--ews-gray-800:#1e293b;--ews-gray-900:#0f172a;--ews-space-1:0.25rem;--ews-space-2:0.5rem;--ews-space-3:0.75rem;--ews-space-4:1rem;--ews-space-5:1.25rem;--ews-space-6:1.5rem;--ews-space-8:2rem;--ews-space-10:2.5rem;--ews-space-12:3rem;--ews-radius-sm:0.25rem;--ews-radius-md:0.375rem;--ews-radius-lg:0.5rem;--ews-radius-xl:0.75rem;--ews-font-sans:-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;--ews-font-mono:"SF Mono","Monaco","Inconsolata","Roboto Mono","Oxygen Mono","Ubuntu Monospace","Source Code Pro","Fira Code","Droid Sans Mono","Courier New",monospace;--ews-text-xs:0.75rem;--ews-text-sm:0.875rem;--ews-text-base:1rem;--ews-text-lg:1.125rem;--ews-text-xl:1.25rem;--ews-text-2xl:1.5rem;--ews-text-3xl:1.875rem;--ews-shadow-sm:0 1px 2px 0 #0000000d;--ews-shadow-md:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--ews-shadow-lg:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a}*{box-sizing:border-box}body{background-color:var(--ews-white);color:var(--ews-gray-900);font-family:var(--ews-font-sans);line-height:1.5}.ews-sr-only{clip:rect(0,0,0,0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*
|
|
2
|
+
! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com
|
|
3
|
+
*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.inset-y-0{bottom:0;top:0}.left-0{left:0}.right-0{right:0}.z-10{z-index:10}.z-50{z-index:50}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.-ml-1{margin-left:-.25rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-2{margin-left:.5rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-12{height:3rem}.h-16{height:4rem}.h-24{height:6rem}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-full{height:100%}.max-h-60{max-height:15rem}.min-h-screen{min-height:100vh}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-3{width:.75rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-80{width:20rem}.w-96{width:24rem}.w-auto{width:auto}.w-full{width:100%}.max-w-2xl{max-width:42rem}.max-w-7xl{max-width:80rem}.max-w-md{max-width:28rem}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.75rem*var(--tw-space-x-reverse))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*var(--tw-space-x-reverse))}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(2rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(2rem*var(--tw-space-x-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(2rem*var(--tw-space-y-reverse));margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)))}.overflow-auto{overflow:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l-4{border-left-width:4px}.border-ews-error{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity,1))}.border-ews-error\/20{border-color:#dc262633}.border-ews-gray-300{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity,1))}.border-ews-primary{--tw-border-opacity:1;border-color:rgb(33 89 108/var(--tw-border-opacity,1))}.border-ews-primary\/20{border-color:#21596c33}.border-ews-success{--tw-border-opacity:1;border-color:rgb(5 150 105/var(--tw-border-opacity,1))}.border-ews-success\/20{border-color:#05966933}.border-ews-warning\/20{border-color:#d9770633}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity,1))}.border-neutral-200{--tw-border-opacity:1;border-color:rgb(229 229 229/var(--tw-border-opacity,1))}.border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.bg-black\/50{background-color:#00000080}.bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.bg-ews-error{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.bg-ews-error\/10{background-color:#dc26261a}.bg-ews-primary{--tw-bg-opacity:1;background-color:rgb(33 89 108/var(--tw-bg-opacity,1))}.bg-ews-primary\/10{background-color:#21596c1a}.bg-ews-secondary{--tw-bg-opacity:1;background-color:rgb(59 161 161/var(--tw-bg-opacity,1))}.bg-ews-success{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.bg-ews-success\/10{background-color:#0596691a}.bg-ews-warning{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity,1))}.bg-ews-warning\/10{background-color:#d977061a}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.bg-neutral-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity,1))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-transparent{background-color:initial}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-12{padding-bottom:3rem;padding-top:3rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-8{padding-bottom:2rem;padding-top:2rem}.pl-10{padding-left:2.5rem}.pl-3{padding-left:.75rem}.pr-10{padding-right:2.5rem}.pr-3{padding-right:.75rem}.pt-0{padding-top:0}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.leading-relaxed{line-height:1.625}.text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.text-ews-error{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-ews-gray-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.text-ews-gray-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.text-ews-gray-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity,1))}.text-ews-primary{--tw-text-opacity:1;color:rgb(33 89 108/var(--tw-text-opacity,1))}.text-ews-primary\/60{color:#21596c99}.text-ews-primary\/70{color:#21596cb3}.text-ews-secondary{--tw-text-opacity:1;color:rgb(59 161 161/var(--tw-text-opacity,1))}.text-ews-success{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity,1))}.text-ews-warning{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.text-neutral-400{--tw-text-opacity:1;color:rgb(163 163 163/var(--tw-text-opacity,1))}.text-neutral-500{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity,1))}.text-neutral-900{--tw-text-opacity:1;color:rgb(23 23 23/var(--tw-text-opacity,1))}.text-purple-800{--tw-text-opacity:1;color:rgb(107 33 168/var(--tw-text-opacity,1))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-sm,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a;--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-200{transition-duration:.2s}.hover\:border-ews-primary:hover{--tw-border-opacity:1;border-color:rgb(33 89 108/var(--tw-border-opacity,1))}.hover\:bg-blue-600:hover{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.hover\:bg-ews-error-hover:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.hover\:bg-ews-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.hover\:bg-ews-primary:hover{--tw-bg-opacity:1;background-color:rgb(33 89 108/var(--tw-bg-opacity,1))}.hover\:bg-ews-primary-hover:hover{--tw-bg-opacity:1;background-color:rgb(26 71 86/var(--tw-bg-opacity,1))}.hover\:bg-ews-primary\/5:hover{background-color:#21596c0d}.hover\:bg-ews-secondary-hover:hover{--tw-bg-opacity:1;background-color:rgb(48 129 129/var(--tw-bg-opacity,1))}.hover\:bg-ews-success-hover:hover{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity,1))}.hover\:bg-ews-warning-hover:hover{--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity,1))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.hover\:text-ews-gray-600:hover{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.hover\:text-ews-primary:hover{--tw-text-opacity:1;color:rgb(33 89 108/var(--tw-text-opacity,1))}.hover\:text-gray-500:hover{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.hover\:text-neutral-600:hover{--tw-text-opacity:1;color:rgb(82 82 82/var(--tw-text-opacity,1))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.focus\:border-ews-error:focus{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity,1))}.focus\:border-ews-primary:focus{--tw-border-opacity:1;border-color:rgb(33 89 108/var(--tw-border-opacity,1))}.focus\:border-ews-success:focus{--tw-border-opacity:1;border-color:rgb(5 150 105/var(--tw-border-opacity,1))}.focus\:outline-none:focus{outline:2px solid #0000;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-ews-error:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(220 38 38/var(--tw-ring-opacity,1))}.focus\:ring-ews-gray-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(100 116 139/var(--tw-ring-opacity,1))}.focus\:ring-ews-primary:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(33 89 108/var(--tw-ring-opacity,1))}.focus\:ring-ews-secondary:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 161 161/var(--tw-ring-opacity,1))}.focus\:ring-ews-success:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(5 150 105/var(--tw-ring-opacity,1))}.focus\:ring-ews-warning:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(217 119 6/var(--tw-ring-opacity,1))}.focus\:ring-offset-0:focus{--tw-ring-offset-width:0px}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-50:disabled{opacity:.5}@media (min-width:640px){.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}}@media (min-width:768px){.md\:flex{display:flex}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:1024px){.lg\:px-8{padding-left:2rem;padding-right:2rem}}
|