@useloops/design-system 1.4.149 → 1.4.151

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import react, { ReactElement, FunctionComponent, ChangeEvent, PropsWithChildren, ReactNode, FC, Dispatch, SetStateAction } from 'react';
2
2
  import * as _mui_material from '@mui/material';
3
- import { AvatarGroupProps as AvatarGroupProps$1, SxProps, ButtonProps as ButtonProps$1, CheckboxProps as CheckboxProps$1, ContainerProps, MenuProps, MenuItemProps, FormControlLabelProps as FormControlLabelProps$1, Theme, Breakpoint, IconButtonProps as IconButtonProps$1, TooltipProps as TooltipProps$1, ButtonGroupProps, TextFieldProps as TextFieldProps$1, LinkProps as LinkProps$1, SelectProps as SelectProps$1, SelectChangeEvent, PaperProps, SwitchProps as SwitchProps$1, TypographyProps as TypographyProps$1, PaletteMode, Direction } from '@mui/material';
3
+ import { AvatarGroupProps as AvatarGroupProps$1, SxProps, ButtonProps as ButtonProps$1, CheckboxProps as CheckboxProps$1, ContainerProps, MenuProps, MenuItemProps, FormControlLabelProps as FormControlLabelProps$1, Theme, Breakpoint, TooltipProps as TooltipProps$1, IconButtonProps as IconButtonProps$1, ButtonGroupProps, TextFieldProps as TextFieldProps$1, LinkProps as LinkProps$1, SelectProps as SelectProps$1, SelectChangeEvent, PaperProps, SwitchProps as SwitchProps$1, TypographyProps as TypographyProps$1, PaletteMode, Direction } from '@mui/material';
4
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
5
5
  import * as _emotion_styled from '@emotion/styled';
6
6
  import * as _mui_system from '@mui/system';
@@ -9,6 +9,7 @@ import { MuiMarkdownProps } from 'mui-markdown';
9
9
  import { NumericFormatProps } from 'react-number-format';
10
10
  import { UniqueIdentifier } from '@dnd-kit/core';
11
11
  import { SubmitHandler } from 'react-hook-form';
12
+ import { TextFieldProps as TextFieldProps$2, NumberFieldProps as NumberFieldProps$1, TextareaProps as TextareaProps$1, SelectProps as SelectProps$2, CheckboxProps as CheckboxProps$2, CheckboxGroupProps as CheckboxGroupProps$1, SwitchProps as SwitchProps$2, SliderProps as SliderProps$1, DifferentialProps as DifferentialProps$1, LikertProps as LikertProps$1, RadioGroupProps as RadioGroupProps$1, RankProps as RankProps$1, RichTextFieldProps as RichTextFieldProps$1, StarRatingProps as StarRatingProps$1, HtmlProps as HtmlProps$1, CustomFieldProps as CustomFieldProps$1, InputLabelProps as InputLabelProps$1, InputLabelHelpProps as InputLabelHelpProps$1 } from 'WebCore';
12
13
 
13
14
  interface ColorRange {
14
15
  0: string;
@@ -180,11 +181,11 @@ interface AuthFormHeaderProps {
180
181
  declare const AuthFormHeader: FunctionComponent<AuthFormHeaderProps>;
181
182
 
182
183
  interface AvatarProps {
183
- variation?: 'sm' | 'lg';
184
- src?: string;
185
184
  alt?: string;
186
- className?: string;
187
185
  children?: ReactElement;
186
+ className?: string;
187
+ sizing?: 'sm' | 'lg';
188
+ src?: string;
188
189
  }
189
190
  declare const Avatar: FunctionComponent<AvatarProps>;
190
191
 
@@ -195,7 +196,7 @@ interface AvatarGroupProps extends AvatarGroupProps$1 {
195
196
  }
196
197
  declare const AvatarGroup: FunctionComponent<AvatarGroupProps>;
197
198
 
198
- type GenericSizeMap = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
199
+ type GenericSizeMap = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl' | 'xxxl';
199
200
 
200
201
  type ButtonSizing = Exclude<GenericSizeMap, 'none'>;
201
202
 
@@ -326,6 +327,7 @@ interface FormControlLabelProps {
326
327
  checked?: boolean;
327
328
  disabled?: boolean;
328
329
  label?: string | ReactElement;
330
+ labelPlacement?: FormControlLabelProps$1['labelPlacement'];
329
331
  sx?: SxProps<Theme>;
330
332
  onChange?: FormControlLabelProps$1['onChange'];
331
333
  value?: unknown;
@@ -348,12 +350,19 @@ interface HtmlProps {
348
350
  declare const Html: FunctionComponent<HtmlProps>;
349
351
 
350
352
  interface IconProps {
351
- name: 'arrow-forward' | 'expand-more' | 'close' | 'play' | 'positive' | 'negative' | 'neutral' | 'info' | 'check-circle' | 'error-outline' | 'lightbulb' | 'warning-amber' | 'access-time' | 'linkedin' | 'medium' | 'menu' | 'unfold-more' | 'navigation-arrow' | 'lock' | 'loopsOfficial' | 'google' | 'linkedin-color' | 'check' | 'dash' | 'gift' | 'push-left' | 'push-right' | 'star' | 'open-in-new' | 'notification' | 'chevron-right' | 'check-thin' | 'home' | 'folder' | 'help' | string;
353
+ name: 'access-time' | 'arrow-forward' | 'check-circle' | 'check-thin' | 'check' | 'chevron-right' | 'close' | 'dash' | 'error-outline' | 'expand-more' | 'folder' | 'gift' | 'google' | 'help' | 'home' | 'info' | 'lightbulb' | 'linkedin-color' | 'linkedin' | 'lock' | 'loopsOfficial' | 'medium' | 'menu' | 'navigation-arrow' | 'negative' | 'neutral' | 'notification' | 'open-in-new' | 'play' | 'positive' | 'push-left' | 'push-right' | 'settings' | 'star' | 'unfold-more' | 'warning-amber' | string;
352
354
  size?: number;
353
355
  sx?: SxProps;
354
356
  }
355
357
  declare const Icon: FunctionComponent<IconProps>;
356
358
 
359
+ interface TooltipProps extends PropsWithChildren {
360
+ message: TooltipProps$1['title'];
361
+ variation?: 'primary';
362
+ placement?: TooltipProps$1['placement'];
363
+ }
364
+ declare const Tooltip: FunctionComponent<TooltipProps>;
365
+
357
366
  type IconButtonSizing = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
358
367
  type IconButtonShapeMap = 'default' | 'round';
359
368
  type IconButtonVariation = 'default' | 'toggle' | 'outlined' | 'raised';
@@ -365,13 +374,6 @@ interface StyledIconButtonProps extends IconButtonProps$1 {
365
374
  loading?: boolean;
366
375
  }
367
376
 
368
- interface TooltipProps extends PropsWithChildren {
369
- message: TooltipProps$1['title'];
370
- variation?: 'primary';
371
- placement?: TooltipProps$1['placement'];
372
- }
373
- declare const Tooltip: FunctionComponent<TooltipProps>;
374
-
375
377
  interface IconButtonProps {
376
378
  variation?: IconButtonVariation;
377
379
  shape?: IconButtonShapeMap;
@@ -473,22 +475,27 @@ declare const Logo: FunctionComponent<React.SVGProps<SVGSVGElement>>;
473
475
 
474
476
  declare const Markdown: (props: MuiMarkdownProps) => react_jsx_runtime.JSX.Element;
475
477
 
476
- interface NavButtonProps {
478
+ type NavigationSizing = 'sm' | 'lg';
479
+
480
+ type MenuButtonSizing = 'sm' | 'md' | 'lg';
481
+ interface MenuButtonProps {
477
482
  active?: boolean;
483
+ danger?: boolean;
484
+ fullWidth?: boolean;
478
485
  href?: string;
479
486
  icon?: string;
480
487
  label: string;
488
+ navigationSizing: NavigationSizing;
481
489
  onClick?: () => void;
482
- variation?: 'sm' | 'lg';
490
+ sizing?: MenuButtonSizing;
483
491
  }
484
- declare const NavButton: FunctionComponent<NavButtonProps>;
492
+ declare const MenuButton: FunctionComponent<MenuButtonProps>;
485
493
 
486
- type NudgeVariation = 'sm' | 'lg';
487
494
  interface NudgeProps extends PropsWithChildren {
488
495
  description: string;
489
496
  notification?: boolean;
490
497
  title: string;
491
- variation?: NudgeVariation;
498
+ navigationSizing: NavigationSizing;
492
499
  }
493
500
  declare const Nudge: FunctionComponent<NudgeProps>;
494
501
 
@@ -691,9 +698,18 @@ interface SurfaceProps extends PropsWithChildren {
691
698
  }
692
699
  declare const Surface: FC<SurfaceProps>;
693
700
 
694
- interface SwitchProps extends SwitchProps$1 {
701
+ interface StyledSwitchProps extends SwitchProps$1 {
702
+ }
703
+
704
+ interface SwitchProps extends StyledSwitchProps {
705
+ value?: boolean;
706
+ label?: string | ReactElement;
707
+ labelPlacement?: Exclude<FormControlLabelProps['labelPlacement'], 'top' | 'bottom'>;
708
+ fullWidth?: boolean;
709
+ onChange?: (event: React.SyntheticEvent<Element, Event>, checked: boolean) => void;
710
+ internalChange?: () => void;
695
711
  }
696
- declare const Switch: _emotion_styled.StyledComponent<SwitchProps & _mui_system.MUIStyledCommonProps<_mui_material.Theme>, {}, {}>;
712
+ declare const Switch: FunctionComponent<SwitchProps>;
697
713
 
698
714
  type TextareaProps = InputFieldBaseProps & {
699
715
  startAdornment?: ReactElement;
@@ -703,10 +719,11 @@ type TextareaProps = InputFieldBaseProps & {
703
719
  declare const Textarea: FunctionComponent<TextareaProps>;
704
720
 
705
721
  interface TypographyProps {
706
- variation: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl' | 'xxxl';
722
+ clamp?: number;
707
723
  component: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p';
724
+ type?: 'default' | 'button';
725
+ variation: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl' | 'xxxl';
708
726
  weight?: 'default' | 'bold';
709
- clamp?: number;
710
727
  }
711
728
  declare const Typography: FunctionComponent<TypographyProps & TypographyProps$1>;
712
729
 
@@ -734,19 +751,19 @@ interface ToastProps {
734
751
  }
735
752
  declare const Toast: FunctionComponent<ToastProps>;
736
753
 
737
- interface MenuItem {
738
- children?: MenuItem[];
739
- danger?: boolean;
740
- onClick?: () => void;
741
- selected?: boolean;
742
- title: string;
743
- }
744
754
  interface UserMenuProps extends PropsWithChildren {
745
755
  avatar?: string;
746
756
  email: string;
747
757
  menuItems?: MenuItem[];
748
758
  name: string;
749
- variation?: 'sm' | 'lg';
759
+ navigationSizing: NavigationSizing;
760
+ }
761
+ interface MenuItem {
762
+ children?: MenuItem[];
763
+ danger?: boolean;
764
+ label: string;
765
+ onClick?: () => void;
766
+ selected?: boolean;
750
767
  }
751
768
  declare const UserMenu: FunctionComponent<UserMenuProps>;
752
769
 
@@ -756,6 +773,9 @@ interface BackgroundOptions {
756
773
  }
757
774
  declare const backgroundCreator: (theme: Theme, options: BackgroundOptions) => string;
758
775
 
776
+ /**
777
+ * Form Generator Core Types
778
+ */
759
779
  interface FormGeneratorHandler {
760
780
  set: () => void;
761
781
  reset: () => void;
@@ -766,12 +786,12 @@ interface FormGeneratorHandler {
766
786
  triggerFormValidation: () => Promise<unknown>;
767
787
  }
768
788
  type FormGeneratorProps = FunctionComponent<{
789
+ ref?: any;
769
790
  formConfig: FormGeneratorConfig;
770
791
  onFormSubmit?: SubmitHandler<any>;
771
792
  onFormChange?: (formData: any) => void;
772
793
  submitButton?: ReactElement;
773
794
  secondaryButton?: ReactElement;
774
- ref?: any;
775
795
  }>;
776
796
  interface FormGeneratorConfig {
777
797
  fields: FieldTypes[];
@@ -785,78 +805,47 @@ interface FormGeneratorConfig {
785
805
  sxStack?: SxProps<Theme>;
786
806
  };
787
807
  }
788
- type TextFieldType = {
789
- fieldType: 'textfield';
790
- } & BaseField & Omit<TextFieldProps, 'value' | 'onChange' | 'name'>;
791
- type NumberFieldType = {
792
- fieldType: 'numberfield';
793
- } & BaseField & Omit<NumberFieldProps, 'value' | 'onChange' | 'name'>;
794
- type TextareaType = {
795
- fieldType: 'textarea';
796
- } & BaseField & Omit<TextareaProps, 'value' | 'onChange' | 'name'>;
797
- type SelectType = {
798
- fieldType: 'select';
799
- defaultValue?: SelectProps['value'];
800
- } & BaseField & Omit<SelectProps, 'value' | 'onChange' | 'name'>;
801
- type CheckboxType = {
802
- fieldType: 'checkbox';
803
- defaultValue?: CheckboxProps['value'];
804
- } & BaseField & Omit<CheckboxProps, 'value' | 'onChange' | 'name'>;
805
- type CheckboxGroupType = {
806
- fieldType: 'checkboxGroup';
807
- defaultValue?: string[];
808
- } & BaseField & Omit<CheckboxGroupProps, 'value' | 'onChange' | 'name'>;
809
- type SliderType = {
810
- fieldType: 'slider';
811
- defaultValue?: SliderProps['value'];
812
- } & BaseField & Omit<SliderProps, 'value' | 'onChange' | 'name'>;
813
- type DifferentialType = {
814
- fieldType: 'differential';
815
- defaultValue?: DifferentialProps['value'];
816
- } & BaseField & Omit<DifferentialProps, 'value' | 'onChange' | 'name'>;
817
- type LikertType = {
818
- fieldType: 'likert';
819
- defaultValue?: LikertProps['value'];
820
- } & BaseField & Omit<LikertProps, 'value' | 'onChange' | 'name'>;
821
- type RadioGroupType = {
822
- fieldType: 'radioGroup';
823
- defaultValue?: RadioGroupProps['value'];
824
- } & BaseField & Omit<RadioGroupProps, 'value' | 'onChange' | 'name'>;
825
- type DragAndDropRankingType = {
826
- fieldType: 'ranking';
827
- defaultValue?: RankProps['value'];
828
- } & BaseField & Omit<RankProps, 'value' | 'onChange' | 'name'>;
829
- type RichTextFieldType = {
830
- fieldType: 'richTextfield';
831
- defaultValue?: RichTextFieldProps['value'];
832
- } & BaseField & Omit<RichTextFieldProps, 'value' | 'onChange' | 'name'>;
833
- type StarRatingType = {
834
- fieldType: 'starRating';
835
- defaultValue?: StarRatingProps['value'];
836
- } & BaseField & Omit<StarRatingProps, 'value' | 'onChange' | 'name'>;
808
+ /**
809
+ * Field Types
810
+ */
811
+ type FieldTypes = CheckboxType | CheckboxGroupType | SwitchType | TextareaType | SelectType | TextFieldType | SliderType | DifferentialType | RichTextFieldType | LikertType | RadioGroupType | DragAndDropRankingType | NumberFieldType | StarRatingType | HTMLType | CustomFieldType;
812
+ type TextFieldType = CreateFieldType<'textfield', TextFieldProps$2, string>;
813
+ type NumberFieldType = CreateFieldType<'numberfield', NumberFieldProps$1, number>;
814
+ type TextareaType = CreateFieldType<'textarea', TextareaProps$1, string>;
815
+ type SelectType = CreateFieldType<'select', SelectProps$2, SelectProps$2['value']>;
816
+ type CheckboxType = CreateFieldType<'checkbox', CheckboxProps$2, NonNullable<CheckboxProps$2['value']>>;
817
+ type CheckboxGroupType = CreateFieldType<'checkboxGroup', CheckboxGroupProps$1, string[]>;
818
+ type SwitchType = CreateFieldType<'switch', SwitchProps$2, NonNullable<SwitchProps$2['checked']>>;
819
+ type SliderType = CreateFieldType<'slider', SliderProps$1, NonNullable<SliderProps$1['value']>>;
820
+ type DifferentialType = CreateFieldType<'differential', DifferentialProps$1, NonNullable<DifferentialProps$1['value']>>;
821
+ type LikertType = CreateFieldType<'likert', LikertProps$1, LikertProps$1['value']>;
822
+ type RadioGroupType = CreateFieldType<'radioGroup', RadioGroupProps$1, RadioGroupProps$1['value']>;
823
+ type DragAndDropRankingType = CreateFieldType<'ranking', RankProps$1, NonNullable<RankProps$1['value']>>;
824
+ type RichTextFieldType = CreateFieldType<'richTextfield', RichTextFieldProps$1, RichTextFieldProps$1['value']>;
825
+ type StarRatingType = CreateFieldType<'starRating', StarRatingProps$1, NonNullable<StarRatingProps$1['value']>>;
837
826
  type HTMLType = {
838
827
  fieldType: 'html';
839
- content: HtmlProps['children'];
828
+ content: HtmlProps$1['children'];
840
829
  defaultValue?: never;
841
830
  } & BaseField;
842
831
  type CustomFieldType = {
843
832
  fieldType: 'customfield';
844
- defaultValue?: CustomFieldProps['value'];
845
- } & BaseField & CustomFieldProps;
846
- type DynamicFieldType = 'textfield' | 'numberfield' | 'textarea' | 'select' | 'checkbox' | 'checkboxGroup' | 'slider' | 'differential' | 'likert' | 'starRating' | 'radioGroup' | 'ranking' | 'richTextfield' | 'customfield';
847
- type FieldType = DynamicFieldType | 'html';
848
- type FieldTypes = CheckboxType | CheckboxGroupType | TextareaType | SelectType | TextFieldType | SliderType | DifferentialType | RichTextFieldType | LikertType | RadioGroupType | DragAndDropRankingType | NumberFieldType | StarRatingType | HTMLType | CustomFieldType;
833
+ defaultValue?: CustomFieldProps$1['value'];
834
+ } & BaseField & CustomFieldProps$1;
835
+ /**
836
+ * Field Type Utilities
837
+ */
849
838
  interface BaseField {
850
839
  name: string;
851
840
  ref?: any;
852
841
  multiline?: boolean;
853
842
  content?: ReactElement;
854
843
  label?: string;
855
- labelProps?: InputLabelProps;
844
+ labelProps?: InputLabelProps$1;
856
845
  helperText?: string;
857
846
  hidden?: boolean;
858
847
  type?: string;
859
- helpTextProps?: InputLabelHelpProps;
848
+ helpTextProps?: InputLabelHelpProps$1;
860
849
  validation?: any;
861
850
  valueTransformer?: (valueToTransform: string) => string;
862
851
  disabled?: boolean;
@@ -867,6 +856,12 @@ interface BaseField {
867
856
  sxInputStack?: SxProps<Theme>;
868
857
  };
869
858
  }
859
+ type CreateFieldType<TFieldType extends string, TProps, TDefaultValue extends any = void> = {
860
+ fieldType: TFieldType;
861
+ } & BaseField & Omit<TProps, 'value' | 'defaultValue' | 'onChange' | 'name'> & (TDefaultValue extends void ? unknown : {
862
+ defaultValue?: TDefaultValue;
863
+ });
864
+ type FieldType = FieldTypes['fieldType'];
870
865
 
871
866
  declare const FormGenerator: FormGeneratorProps;
872
867
 
@@ -1305,4 +1300,4 @@ declare module '@mui/system' {
1305
1300
  }
1306
1301
  }
1307
1302
 
1308
- export { AnnualController, type AnnualControllerProps, AuthContainerSurface, type AuthContainerSurfaceProps, AuthFormHeader, type AuthFormHeaderProps, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, Button, type ButtonProps, CheckboxGroup as CheckBoxGroup, Checkbox, type CheckboxGroupProps, type CheckboxProps, ColorBackgroundContainer, type ColorBackgroundContainerProps, CustomField, type CustomFieldProps, DEFAULT_MAX_INPUT_LENGTH, Differential, type DifferentialProps, DropdownMenu, type FieldType, type FieldTypes, FormControlLabel, FormGenerator, type FormGeneratorConfig, type FormGeneratorHandler, GridOverlay, type GridOverlayProps, Html, type HtmlProps, Icon, IconButton, IconButtonGroup, InputFieldBase, type InputFieldBaseProps, InputLabel, InputLabelHelp, type InputLabelHelpProps, type InputLabelProps, Likert, type LikertProps, Link, type LinkProps, Loader, type LoaderProps, Logo, Markdown, NavButton, type NavButtonProps, Nudge, type NudgeProps, NumberField, type NumberFieldProps, Pill, type PillProps, PlanFeatureTable, type PlanFeatureTableProps, PlanTierCard, type PlanTierCardProps, PlanTierCardScale, type PlanTierCardScaleProps, Portal, type PortalProps, PoweredByWatermarkLogo, Progress, type ProgressProps, Radio, RadioGroup, type RadioGroupProps, type RadioProps, Rank, type RankProps, RichTextField, type RichTextFieldProps, Select, type SelectProps, Slider, type SliderProps, SortableList, type SortableListProps, StarRating, type StarRatingProps, Surface, type SurfaceProps, Switch, type SwitchProps, Textarea as TextArea, TextBarDivider, type TextBarDividerProps, TextField, type TextFieldProps, type TextareaProps, ThemeProvider, TickGroup, type TickGroupProps, Toast, type ToastProps, Tooltip, type TooltipProps, Typography, type TypographyProps, UserMenu, type UserMenuProps, backgroundCreator, chooseArticle, defaultInputValidation, emailValidation, passwordValidation, useDropdownMenu };
1303
+ export { AnnualController, type AnnualControllerProps, AuthContainerSurface, type AuthContainerSurfaceProps, AuthFormHeader, type AuthFormHeaderProps, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, Button, type ButtonProps, CheckboxGroup as CheckBoxGroup, Checkbox, type CheckboxGroupProps, type CheckboxProps, ColorBackgroundContainer, type ColorBackgroundContainerProps, CustomField, type CustomFieldProps, DEFAULT_MAX_INPUT_LENGTH, Differential, type DifferentialProps, DropdownMenu, type FieldType, type FieldTypes, FormControlLabel, FormGenerator, type FormGeneratorConfig, type FormGeneratorHandler, GridOverlay, type GridOverlayProps, Html, type HtmlProps, Icon, IconButton, IconButtonGroup, type IconButtonProps, InputFieldBase, type InputFieldBaseProps, InputLabel, InputLabelHelp, type InputLabelHelpProps, type InputLabelProps, Likert, type LikertProps, Link, type LinkProps, Loader, type LoaderProps, Logo, Markdown, MenuButton, type MenuButtonProps, Nudge, type NudgeProps, NumberField, type NumberFieldProps, Pill, type PillProps, PlanFeatureTable, type PlanFeatureTableProps, PlanTierCard, type PlanTierCardProps, PlanTierCardScale, type PlanTierCardScaleProps, Portal, type PortalProps, PoweredByWatermarkLogo, Progress, type ProgressProps, Radio, RadioGroup, type RadioGroupProps, type RadioProps, Rank, type RankProps, RichTextField, type RichTextFieldProps, Select, type SelectProps, Slider, type SliderProps, SortableList, type SortableListProps, StarRating, type StarRatingProps, Surface, type SurfaceProps, Switch, type SwitchProps, Textarea as TextArea, TextBarDivider, type TextBarDividerProps, TextField, type TextFieldProps, type TextareaProps, ThemeProvider, TickGroup, type TickGroupProps, Toast, type ToastProps, Tooltip, type TooltipProps, Typography, type TypographyProps, UserMenu, type UserMenuProps, backgroundCreator, chooseArticle, defaultInputValidation, emailValidation, passwordValidation, useDropdownMenu };