@luscii-healthtech/web-ui 2.0.0 → 2.3.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 (57) hide show
  1. package/dist/components/Accordion/Accordion.d.ts +10 -0
  2. package/dist/components/Accordion/AccordionItem.d.ts +9 -0
  3. package/dist/components/Form/Form.d.ts +9 -0
  4. package/dist/components/Form/FormFieldDecorator.d.ts +8 -0
  5. package/dist/components/Form/FormInput.d.ts +3 -0
  6. package/dist/components/Form/FormRadioGroup.d.ts +3 -0
  7. package/dist/components/Form/FormSelect.d.ts +3 -0
  8. package/dist/components/Form/form.transformer.d.ts +20 -0
  9. package/dist/components/Form/form.types.d.ts +54 -0
  10. package/dist/components/Input/Input.d.ts +8 -7
  11. package/dist/components/Input/SearchInput.d.ts +1 -1
  12. package/dist/components/List/List.d.ts +1 -1
  13. package/dist/components/List/List.types.d.ts +1 -0
  14. package/dist/components/List/ListItemSkeleton.d.ts +2 -0
  15. package/dist/components/List/ListSkeleton.d.ts +7 -0
  16. package/dist/components/Radio/Radio.d.ts +3 -0
  17. package/dist/components/Radio/RadioV2.d.ts +17 -0
  18. package/dist/components/RadioGroup/RadioGroup.d.ts +3 -0
  19. package/dist/components/RadioGroup/RadioGroupV2.d.ts +9 -0
  20. package/dist/components/Select/Select.d.ts +3 -0
  21. package/dist/components/Select/SelectV2.d.ts +31 -0
  22. package/dist/index.d.ts +2 -0
  23. package/dist/web-ui-tailwind.css +50 -0
  24. package/dist/web-ui.cjs.development.js +604 -40
  25. package/dist/web-ui.cjs.development.js.map +1 -1
  26. package/dist/web-ui.cjs.production.min.js +1 -1
  27. package/dist/web-ui.cjs.production.min.js.map +1 -1
  28. package/dist/web-ui.esm.js +604 -41
  29. package/dist/web-ui.esm.js.map +1 -1
  30. package/package.json +6 -3
  31. package/src/components/Accordion/Accordion.tsx +33 -0
  32. package/src/components/Accordion/AccordionItem.tsx +50 -0
  33. package/src/components/Form/Form.tsx +106 -0
  34. package/src/components/Form/FormFieldDecorator.tsx +66 -0
  35. package/src/components/Form/FormInput.tsx +47 -0
  36. package/src/components/Form/FormRadioGroup.tsx +23 -0
  37. package/src/components/Form/FormSelect.tsx +32 -0
  38. package/src/components/Form/form.transformer.ts +9 -0
  39. package/src/components/Form/form.types.ts +132 -0
  40. package/src/components/Input/Input.tsx +160 -165
  41. package/src/components/Input/SearchInput.tsx +13 -3
  42. package/src/components/List/List.tsx +13 -9
  43. package/src/components/List/List.types.ts +1 -0
  44. package/src/components/List/ListItemSkeleton.tsx +26 -0
  45. package/src/components/List/ListSkeleton.scss +5 -0
  46. package/src/components/List/ListSkeleton.tsx +30 -0
  47. package/src/components/Radio/Radio.js +3 -0
  48. package/src/components/Radio/RadioV2.css +15 -0
  49. package/src/components/Radio/RadioV2.tsx +87 -0
  50. package/src/components/RadioGroup/RadioGroup.js +3 -0
  51. package/src/components/RadioGroup/RadioGroupV2.tsx +35 -0
  52. package/src/components/Select/Select.tsx +38 -12
  53. package/src/components/Select/SelectV2.tsx +171 -0
  54. package/src/index.tsx +3 -0
  55. package/src/styles/_skeleton.scss +63 -0
  56. package/src/types/general.types.ts +1 -1
  57. package/src/components/Select/Select.examples.md +0 -161
@@ -0,0 +1,10 @@
1
+ import React from "react";
2
+ import { AccordionItemProps } from "./AccordionItem";
3
+ export interface AccordionProps {
4
+ dataTestId?: string;
5
+ items: AccordionItemProps[];
6
+ className?: string;
7
+ isCollapsedByDefault?: boolean;
8
+ }
9
+ declare const Accordion: React.VFC<AccordionProps>;
10
+ export default Accordion;
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ export interface AccordionItemProps {
3
+ id: string;
4
+ title: string;
5
+ content: React.ReactNode;
6
+ className?: string;
7
+ isCollapsedByDefault?: boolean;
8
+ }
9
+ export declare const AccordionItem: React.VFC<AccordionItemProps>;
@@ -0,0 +1,9 @@
1
+ /// <reference types="react" />
2
+ import { FormProps } from "./form.types";
3
+ /**
4
+ * Create a straight forward Form.
5
+ *
6
+ * TODO: wrap this in some Page component to style the div and buttons
7
+ * WARNING: don't use this component before some styling errors are resolved.
8
+ */
9
+ export declare function Form<TFieldValues>({ fields, onValid, onError, defaultValues, }: FormProps<TFieldValues>): JSX.Element;
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import { FormFieldDecoratorWithGeneratedProps } from "./form.types";
3
+ /**
4
+ * Decorator for any input component. Adds a label and additional information to be shown.
5
+ *
6
+ * Includes the default error handling from react-hook-form.
7
+ */
8
+ export declare function FormFieldDecorator({ name, children, label, fieldRequired, info, fieldErrors, decoratorClassname, }: FormFieldDecoratorWithGeneratedProps): JSX.Element;
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ import { FormInputProps } from "./form.types";
3
+ export declare const FormInput: React.ForwardRefExoticComponent<Pick<FormInputProps, "name" | "onChange" | "accept" | "acceptCharset" | "action" | "allowFullScreen" | "allowTransparency" | "alt" | "as" | "async" | "autoComplete" | "autoFocus" | "autoPlay" | "capture" | "cellPadding" | "cellSpacing" | "charSet" | "challenge" | "checked" | "cite" | "classID" | "cols" | "colSpan" | "content" | "controls" | "coords" | "crossOrigin" | "data" | "dateTime" | "default" | "defer" | "disabled" | "download" | "encType" | "form" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "frameBorder" | "headers" | "height" | "high" | "href" | "hrefLang" | "htmlFor" | "httpEquiv" | "integrity" | "keyParams" | "keyType" | "kind" | "label" | "list" | "loop" | "low" | "manifest" | "marginHeight" | "marginWidth" | "max" | "maxLength" | "media" | "mediaGroup" | "method" | "min" | "minLength" | "multiple" | "muted" | "nonce" | "noValidate" | "open" | "optimum" | "pattern" | "placeholder" | "playsInline" | "poster" | "preload" | "readOnly" | "rel" | "required" | "reversed" | "rows" | "rowSpan" | "sandbox" | "scope" | "scoped" | "scrolling" | "seamless" | "selected" | "shape" | "size" | "sizes" | "span" | "src" | "srcDoc" | "srcLang" | "srcSet" | "start" | "step" | "summary" | "target" | "type" | "useMap" | "value" | "width" | "wmode" | "wrap" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "id" | "lang" | "slot" | "spellCheck" | "style" | "tabIndex" | "title" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "key" | "clearable" | "isDisabled" | "withPrefix" | "withSuffix" | "icon" | "isError" | "fieldErrors" | "fieldRequired" | "info" | "decoratorClassname"> & React.RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ import { FormRadioGroupProps } from "./form.types";
3
+ export declare const FormRadioGroup: React.ForwardRefExoticComponent<FormRadioGroupProps & React.RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ import { FormSelectProps } from "./form.types";
3
+ export declare const FormSelect: React.ForwardRefExoticComponent<FormSelectProps & React.RefAttributes<any>>;
@@ -0,0 +1,20 @@
1
+ import { FieldErrors } from "react-hook-form";
2
+ export declare const hasError: (name?: string | undefined, errors?: FieldErrors<Record<string, any>> | undefined) => boolean;
3
+ export declare const isRequired: (options?: Partial<{
4
+ required: string | boolean | import("react-hook-form").ValidationValueMessage<boolean>;
5
+ min: import("react-hook-form").ValidationRule<string | number>;
6
+ max: import("react-hook-form").ValidationRule<string | number>;
7
+ maxLength: import("react-hook-form").ValidationRule<number>;
8
+ minLength: import("react-hook-form").ValidationRule<number>;
9
+ pattern: import("react-hook-form").ValidationRule<RegExp>;
10
+ validate: import("react-hook-form").Validate<any> | Record<string, import("react-hook-form").Validate<any>>;
11
+ valueAsNumber: boolean;
12
+ valueAsDate: boolean;
13
+ value: any;
14
+ setValueAs: (value: any) => any;
15
+ shouldUnregister?: boolean | undefined;
16
+ onChange?: ((event: any) => void) | undefined;
17
+ onBlur?: ((event: any) => void) | undefined;
18
+ disabled: boolean;
19
+ deps: string | string[];
20
+ }> | undefined) => boolean;
@@ -0,0 +1,54 @@
1
+ import { Control, DeepPartial, FieldErrors, FieldPath, FieldValues, RegisterOptions, SubmitErrorHandler, SubmitHandler } from "react-hook-form";
2
+ import React, { HTMLInputTypeAttribute } from "react";
3
+ import { InputProps } from "../Input/Input";
4
+ import { RadioGroupProps } from "../RadioGroup/RadioGroupV2";
5
+ import { SelectProps } from "../Select/SelectV2";
6
+ export declare type AllowedTextInputTypes = Extract<HTMLInputTypeAttribute, "email" | "number" | "password" | "text">;
7
+ export interface FormProps<TFieldValues extends FieldValues> {
8
+ fields: (FormFieldProps<TFieldValues> | FormFieldRowProps<TFieldValues>)[];
9
+ onValid: SubmitHandler<TFieldValues>;
10
+ onError?: SubmitErrorHandler<TFieldValues>;
11
+ defaultValues?: DeepPartial<TFieldValues>;
12
+ }
13
+ interface FormFieldGenericProps<TFieldType, TFieldValues> extends FormFieldDecoratorProps {
14
+ name: FieldPath<TFieldValues>;
15
+ options?: RegisterOptions;
16
+ fieldProps?: TFieldType;
17
+ }
18
+ interface FormFieldDecoratorProps {
19
+ label?: string;
20
+ info?: string;
21
+ decoratorClassname?: string;
22
+ }
23
+ export declare type FormFieldProps<TFieldValues> = FormFieldInputProps<TFieldValues> | FormFieldSelectProps<TFieldValues> | FormFieldRadioGroupProps<TFieldValues>;
24
+ export interface FormFieldRowProps<TFieldValues> {
25
+ type: "row";
26
+ key: string;
27
+ fields: FormFieldProps<TFieldValues>[];
28
+ }
29
+ interface FormFieldInputProps<TFieldValues> extends FormFieldGenericProps<Omit<InputProps, "name">, TFieldValues> {
30
+ type: AllowedTextInputTypes;
31
+ }
32
+ interface FormFieldRadioGroupProps<TFieldValues> extends FormFieldGenericProps<Omit<RadioGroupProps, "name">, TFieldValues> {
33
+ type: "radioGroup";
34
+ }
35
+ export interface FormFieldSelectProps<TFieldValues> extends FormFieldGenericProps<SelectProps, TFieldValues> {
36
+ type: "select";
37
+ fieldProps: SelectProps;
38
+ }
39
+ export interface FormFieldDecoratorWithGeneratedProps extends FormFieldDecoratorProps {
40
+ name: string;
41
+ fieldErrors: FieldErrors;
42
+ fieldRequired: boolean;
43
+ children?: React.ReactNode;
44
+ }
45
+ export interface FormInputProps extends Omit<InputProps, "name">, FormFieldDecoratorWithGeneratedProps {
46
+ type: Extract<HTMLInputTypeAttribute, "email" | "number" | "password" | "text">;
47
+ }
48
+ export interface FormRadioGroupProps extends RadioGroupProps, FormFieldDecoratorWithGeneratedProps {
49
+ }
50
+ export interface FormSelectProps extends Omit<SelectProps, "name">, FormFieldDecoratorWithGeneratedProps {
51
+ control: Control;
52
+ rules?: Exclude<RegisterOptions, "valueAsNumber" | "valueAsDate" | "setValueAs">;
53
+ }
54
+ export {};
@@ -1,13 +1,15 @@
1
- import React, { HTMLInputTypeAttribute } from "react";
1
+ import React from "react";
2
+ import { AllowedTextInputTypes } from "../Form/form.types";
2
3
  import { IconProps } from "../Icons/types/IconProps.type";
3
4
  import "./Input.css";
4
- declare type AllowedInputTypes = Extract<HTMLInputTypeAttribute, "email" | "number" | "password" | "text">;
5
- export declare const INPUT_TYPES: Record<string, AllowedInputTypes>;
5
+ export declare const INPUT_TYPES: Record<string, AllowedTextInputTypes>;
6
6
  /**
7
7
  * It's very complicated to tap into the onChange events of inputs,
8
8
  * so I omit the type it requires and add a easier one to deal with.
9
9
  */
10
- declare type CustomHTMLInputProps = Omit<React.HTMLProps<HTMLInputElement>, "onChange">;
10
+ declare type CustomHTMLInputProps = Omit<React.HTMLProps<HTMLInputElement>, "onChange"> & {
11
+ isError?: boolean;
12
+ };
11
13
  declare type FakeEventTarget = {
12
14
  target: {
13
15
  value: string;
@@ -19,14 +21,13 @@ declare type FakeEventTarget = {
19
21
  };
20
22
  };
21
23
  export interface InputProps extends CustomHTMLInputProps {
22
- type?: AllowedInputTypes;
24
+ type?: AllowedTextInputTypes;
23
25
  clearable?: boolean;
24
26
  isDisabled?: boolean;
25
27
  withPrefix?: string;
26
28
  withSuffix?: string;
27
29
  icon?: React.VoidFunctionComponent<IconProps>;
28
30
  onChange?: (event: FakeEventTarget) => void;
29
- setRef?: (refTarget: HTMLInputElement) => void;
30
31
  }
31
- declare const Input: React.VoidFunctionComponent<InputProps>;
32
+ declare const Input: React.ForwardRefExoticComponent<Pick<InputProps, "color" | "hidden" | "onChange" | "accept" | "acceptCharset" | "action" | "allowFullScreen" | "allowTransparency" | "alt" | "as" | "async" | "autoComplete" | "autoFocus" | "autoPlay" | "capture" | "cellPadding" | "cellSpacing" | "charSet" | "challenge" | "checked" | "cite" | "classID" | "cols" | "colSpan" | "content" | "controls" | "coords" | "crossOrigin" | "data" | "dateTime" | "default" | "defer" | "disabled" | "download" | "encType" | "form" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "frameBorder" | "headers" | "height" | "high" | "href" | "hrefLang" | "htmlFor" | "httpEquiv" | "integrity" | "keyParams" | "keyType" | "kind" | "label" | "list" | "loop" | "low" | "manifest" | "marginHeight" | "marginWidth" | "max" | "maxLength" | "media" | "mediaGroup" | "method" | "min" | "minLength" | "multiple" | "muted" | "name" | "nonce" | "noValidate" | "open" | "optimum" | "pattern" | "placeholder" | "playsInline" | "poster" | "preload" | "readOnly" | "rel" | "required" | "reversed" | "rows" | "rowSpan" | "sandbox" | "scope" | "scoped" | "scrolling" | "seamless" | "selected" | "shape" | "size" | "sizes" | "span" | "src" | "srcDoc" | "srcLang" | "srcSet" | "start" | "step" | "summary" | "target" | "type" | "useMap" | "value" | "width" | "wmode" | "wrap" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "id" | "lang" | "slot" | "spellCheck" | "style" | "tabIndex" | "title" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "key" | "withSuffix" | "withPrefix" | "clearable" | "isDisabled" | "icon" | "isError"> & React.RefAttributes<HTMLInputElement>>;
32
33
  export default Input;
@@ -1,4 +1,4 @@
1
1
  import React from "react";
2
2
  import { InputProps } from "./Input";
3
3
  export declare type SearchInputProps = Omit<InputProps, "icon" | "withSuffix" | "withPrefix" | "type" | "clearable">;
4
- export declare const SearchInput: React.VoidFunctionComponent<SearchInputProps>;
4
+ export declare const SearchInput: React.ForwardRefExoticComponent<Pick<Pick<InputProps, "onChange" | "accept" | "acceptCharset" | "action" | "allowFullScreen" | "allowTransparency" | "alt" | "as" | "async" | "autoComplete" | "autoFocus" | "autoPlay" | "capture" | "cellPadding" | "cellSpacing" | "charSet" | "challenge" | "checked" | "cite" | "classID" | "cols" | "colSpan" | "content" | "controls" | "coords" | "crossOrigin" | "data" | "dateTime" | "default" | "defer" | "disabled" | "download" | "encType" | "form" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "frameBorder" | "headers" | "height" | "high" | "href" | "hrefLang" | "htmlFor" | "httpEquiv" | "integrity" | "keyParams" | "keyType" | "kind" | "label" | "list" | "loop" | "low" | "manifest" | "marginHeight" | "marginWidth" | "max" | "maxLength" | "media" | "mediaGroup" | "method" | "min" | "minLength" | "multiple" | "muted" | "name" | "nonce" | "noValidate" | "open" | "optimum" | "pattern" | "placeholder" | "playsInline" | "poster" | "preload" | "readOnly" | "rel" | "required" | "reversed" | "rows" | "rowSpan" | "sandbox" | "scope" | "scoped" | "scrolling" | "seamless" | "selected" | "shape" | "size" | "sizes" | "span" | "src" | "srcDoc" | "srcLang" | "srcSet" | "start" | "step" | "summary" | "target" | "useMap" | "value" | "width" | "wmode" | "wrap" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "id" | "lang" | "slot" | "spellCheck" | "style" | "tabIndex" | "title" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "ref" | "key" | "isDisabled" | "isError">, "onChange" | "accept" | "acceptCharset" | "action" | "allowFullScreen" | "allowTransparency" | "alt" | "as" | "async" | "autoComplete" | "autoFocus" | "autoPlay" | "capture" | "cellPadding" | "cellSpacing" | "charSet" | "challenge" | "checked" | "cite" | "classID" | "cols" | "colSpan" | "content" | "controls" | "coords" | "crossOrigin" | "data" | "dateTime" | "default" | "defer" | "disabled" | "download" | "encType" | "form" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "frameBorder" | "headers" | "height" | "high" | "href" | "hrefLang" | "htmlFor" | "httpEquiv" | "integrity" | "keyParams" | "keyType" | "kind" | "label" | "list" | "loop" | "low" | "manifest" | "marginHeight" | "marginWidth" | "max" | "maxLength" | "media" | "mediaGroup" | "method" | "min" | "minLength" | "multiple" | "muted" | "name" | "nonce" | "noValidate" | "open" | "optimum" | "pattern" | "placeholder" | "playsInline" | "poster" | "preload" | "readOnly" | "rel" | "required" | "reversed" | "rows" | "rowSpan" | "sandbox" | "scope" | "scoped" | "scrolling" | "seamless" | "selected" | "shape" | "size" | "sizes" | "span" | "src" | "srcDoc" | "srcLang" | "srcSet" | "start" | "step" | "summary" | "target" | "useMap" | "value" | "width" | "wmode" | "wrap" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "id" | "lang" | "slot" | "spellCheck" | "style" | "tabIndex" | "title" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "key" | "isDisabled" | "isError"> & React.RefAttributes<HTMLInputElement>>;
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
2
  import { ListProps, ListItemProps, OnAssetLoadErrorPayload } from "./List.types";
3
3
  export { ListProps, ListItemProps, OnAssetLoadErrorPayload };
4
- export declare const List: ({ title, headerButton, headerTransparent, items, onAssetLoadError, onDragEnd, emptyStateMessage, }: ListProps) => JSX.Element;
4
+ export declare const List: ({ title, headerButton, headerTransparent, items, onAssetLoadError, onDragEnd, emptyStateMessage, isLoading, }: ListProps) => JSX.Element;
5
5
  export default List;
@@ -30,6 +30,7 @@ export declare type ListProps = {
30
30
  onAssetLoadError?: (payload: OnAssetLoadErrorPayload) => void;
31
31
  onDragEnd?: (itemId: string | number, newIndex: number) => void;
32
32
  emptyStateMessage?: string;
33
+ isLoading?: boolean;
33
34
  };
34
35
  export interface Dragula {
35
36
  destroy?: () => void;
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export declare const ListItemSkeleton: () => JSX.Element;
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ import "./ListSkeleton.scss";
3
+ declare type ListSkeletonProps = {
4
+ items: number;
5
+ };
6
+ export declare const ListSkeleton: ({ items }: ListSkeletonProps) => JSX.Element;
7
+ export {};
@@ -1,4 +1,7 @@
1
1
  export default Radio;
2
+ /**
3
+ * @deprecated: use RadioV2 instead
4
+ */
2
5
  declare class Radio extends React.PureComponent<any, any, any> {
3
6
  static propTypes: {
4
7
  className: PropTypes.Requireable<string>;
@@ -0,0 +1,17 @@
1
+ import React from "react";
2
+ import "./RadioV2.css";
3
+ export interface RadioProps extends React.InputHTMLAttributes<HTMLInputElement> {
4
+ name: string;
5
+ value: string | number;
6
+ text?: string;
7
+ info?: string;
8
+ isError?: boolean;
9
+ innerRef?: React.Ref<HTMLInputElement>;
10
+ }
11
+ /**
12
+ * TODO: The CSS styling is all messed up, including isError
13
+ * Warning: don't use this prop before this is resolved
14
+ * Issue to track: https://github.com/Luscii/web-ui/issues/57
15
+ * TODO: remove this comment once this is resolved
16
+ */
17
+ export declare const RadioV2: React.ForwardRefExoticComponent<RadioProps & React.RefAttributes<HTMLInputElement>>;
@@ -1,4 +1,7 @@
1
1
  export default RadioGroup;
2
+ /**
3
+ * @deprecated: use RadioV2 instead
4
+ */
2
5
  declare function RadioGroup({ className, radioClassName, name, selectedOption, isVertical, radioOptions, onChange, error, isDisabled, ...otherOptions }: {
3
6
  [x: string]: any;
4
7
  className: any;
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ import { RadioProps } from "../Radio/RadioV2";
3
+ export interface RadioGroupProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "value"> {
4
+ name: string;
5
+ isError?: boolean;
6
+ options: Omit<RadioProps, "name">[];
7
+ innerRef?: React.Ref<HTMLInputElement>;
8
+ }
9
+ export declare const RadioGroupV2: React.ForwardRefExoticComponent<RadioGroupProps & React.RefAttributes<HTMLInputElement>>;
@@ -10,5 +10,8 @@ import React from "react";
10
10
  */
11
11
  import "./Select.scss";
12
12
  declare type CustomSelect = <Option, IsMulti extends boolean, Group extends GroupBase<Option>>(props: Props<Option, IsMulti, Group>, ref: React.RefAttributes<SelectInstance<Option, IsMulti, Group>>) => React.ReactElement;
13
+ /**
14
+ * @deprecated: use SelectV2 instead
15
+ */
13
16
  declare const CustomSelect: CustomSelect;
14
17
  export default CustomSelect;
@@ -0,0 +1,31 @@
1
+ import type { Props, GroupBase } from "react-select";
2
+ import React from "react";
3
+ /**
4
+ * Exceptional case for this file:
5
+ * We use postcss-url to inline and base64 our image assets.
6
+ * But the library can only see as far as css files.
7
+ * When javascript gets in the way (react-select uses a package called `emotion` for styles), postcss-url cannot
8
+ * bundle the svg assets used here, and we end up with some broken style.
9
+ */
10
+ import "./Select.scss";
11
+ interface OptionMinimal {
12
+ value: any;
13
+ label?: string;
14
+ }
15
+ export interface SelectProps<Option extends OptionMinimal = OptionMinimal, IsMulti extends boolean = any, Group extends GroupBase<Option> = GroupBase<Option>> extends Props<Option, IsMulti, Group> {
16
+ isError?: boolean;
17
+ }
18
+ /**
19
+ * A wrapper around react-select to style it according to our design specification.
20
+ *
21
+ * In addition, the value is taken out of the option, instead of returning the complete option.
22
+ *
23
+ * Care when using grouped options: the value of the options overspanning all groups need to be unique!
24
+ * For instance, if you have an option with value "chocolate" in both the groups "flavor" and "dip", then you get unforeseen errors.
25
+ * This is a problem within react-select itself, not our wrapper.
26
+ *
27
+ * Care when using defaultValue: this still requires the complete Option (instead of the value of the Option).
28
+ * So far there wasn't a use-case for this.
29
+ */
30
+ export declare const Select: React.ForwardRefExoticComponent<SelectProps<OptionMinimal, boolean, GroupBase<any>> & React.RefAttributes<unknown>>;
31
+ export {};
package/dist/index.d.ts CHANGED
@@ -56,6 +56,8 @@ export { Timeline } from "./components/Timeline/Timeline";
56
56
  export { ViewItem, ViewItemProps } from "./components/ViewItem/ViewItem";
57
57
  export { default as Text } from "./components/Text/Text";
58
58
  export { SearchInput, SearchInputProps } from "./components/Input/SearchInput";
59
+ export { Form } from "./components/Form/Form";
60
+ export { FormProps } from "./components/Form/form.types";
59
61
  export { IconProps } from "./components/Icons/types/IconProps.type";
60
62
  export { AddIcon } from "./components/Icons/AddIcon";
61
63
  export { AlertsIcon } from "./components/Icons/AlertsIcon";
@@ -615,6 +615,12 @@ video {
615
615
  margin-left: calc(0.25rem * calc(1 - var(--space-x-reverse)));
616
616
  }
617
617
 
618
+ .space-y-2 > :not(template) ~ :not(template) {
619
+ --space-y-reverse: 0;
620
+ margin-top: calc(0.5rem * calc(1 - var(--space-y-reverse)));
621
+ margin-bottom: calc(0.5rem * var(--space-y-reverse));
622
+ }
623
+
618
624
  .space-x-2 > :not(template) ~ :not(template) {
619
625
  --space-x-reverse: 0;
620
626
  margin-right: calc(0.5rem * var(--space-x-reverse));
@@ -645,6 +651,22 @@ video {
645
651
  margin-left: calc(1.5rem * calc(1 - var(--space-x-reverse)));
646
652
  }
647
653
 
654
+ .divide-y > :not(template) ~ :not(template) {
655
+ --divide-y-reverse: 0;
656
+ border-top-width: calc(1px * calc(1 - var(--divide-y-reverse)));
657
+ border-bottom-width: calc(1px * var(--divide-y-reverse));
658
+ }
659
+
660
+ .divide-slate-200 > :not(template) ~ :not(template) {
661
+ --divide-opacity: 1;
662
+ border-color: #e2e8f0;
663
+ border-color: rgba(226, 232, 240, var(--divide-opacity));
664
+ }
665
+
666
+ .appearance-none {
667
+ appearance: none;
668
+ }
669
+
648
670
  .bg-transparent {
649
671
  background-color: transparent;
650
672
  }
@@ -1204,6 +1226,10 @@ video {
1204
1226
  height: 100vh;
1205
1227
  }
1206
1228
 
1229
+ .h-1\.5 {
1230
+ height: 0.375rem;
1231
+ }
1232
+
1207
1233
  .last\:h-0:last-child {
1208
1234
  height: 0;
1209
1235
  }
@@ -1252,6 +1278,10 @@ video {
1252
1278
  line-height: 1;
1253
1279
  }
1254
1280
 
1281
+ .leading-tight {
1282
+ line-height: 1.25;
1283
+ }
1284
+
1255
1285
  .list-none {
1256
1286
  list-style-type: none;
1257
1287
  }
@@ -1303,6 +1333,10 @@ video {
1303
1333
  margin-left: 0;
1304
1334
  }
1305
1335
 
1336
+ .mt-1 {
1337
+ margin-top: 0.25rem;
1338
+ }
1339
+
1306
1340
  .mb-1 {
1307
1341
  margin-bottom: 0.25rem;
1308
1342
  }
@@ -1359,6 +1393,10 @@ video {
1359
1393
  margin-bottom: 1.5rem;
1360
1394
  }
1361
1395
 
1396
+ .ml-6 {
1397
+ margin-left: 1.5rem;
1398
+ }
1399
+
1362
1400
  .mt-8 {
1363
1401
  margin-top: 2rem;
1364
1402
  }
@@ -1707,6 +1745,10 @@ video {
1707
1745
  box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
1708
1746
  }
1709
1747
 
1748
+ .shadow {
1749
+ box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.05);
1750
+ }
1751
+
1710
1752
  .shadow-md {
1711
1753
  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
1712
1754
  }
@@ -1959,6 +2001,10 @@ video {
1959
2001
  white-space: nowrap;
1960
2002
  }
1961
2003
 
2004
+ .w-1 {
2005
+ width: 0.25rem;
2006
+ }
2007
+
1962
2008
  .w-2 {
1963
2009
  width: 0.5rem;
1964
2010
  }
@@ -2015,6 +2061,10 @@ video {
2015
2061
  width: 100vw;
2016
2062
  }
2017
2063
 
2064
+ .w-1\.5 {
2065
+ width: 0.375rem;
2066
+ }
2067
+
2018
2068
  .z-10 {
2019
2069
  z-index: 10;
2020
2070
  }