@luscii-healthtech/web-ui 21.4.2 → 22.0.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.
@@ -1,8 +1,8 @@
1
1
  import React from "react";
2
- import { AllowedTextInputTypes } from "../Form/form.types";
3
2
  import type { IconKey, IconProps } from "../Icons/types/IconProps.type";
4
- import { FormFieldWidth } from "../Form/form.types";
5
3
  import "./Input.css";
4
+ type AllowedTextInputTypes = Extract<React.HTMLInputTypeAttribute, "email" | "number" | "password" | "text">;
5
+ type FormFieldWidth = "sm" | "md" | "lg" | "xl" | "full";
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.
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
- import type { AllowedTextInputTypes } from "../Form/form.types";
3
2
  import type { IconProps } from "../Icons/types/IconProps.type";
4
- import type { FormFieldWidth } from "../Form/form.types";
3
+ type AllowedTextInputTypes = Extract<React.HTMLInputTypeAttribute, "email" | "number" | "password" | "text">;
4
+ type FormFieldWidth = "sm" | "md" | "lg" | "xl" | "full";
5
5
  export declare const StyledInput: React.ForwardRefExoticComponent<Omit<Omit<React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref">, "type"> & {
6
6
  type?: AllowedTextInputTypes | undefined;
7
7
  suffix?: string | undefined;
@@ -12,3 +12,4 @@ export declare const StyledInput: React.ForwardRefExoticComponent<Omit<Omit<Reac
12
12
  isClearIconVisible?: boolean | undefined;
13
13
  onClickClearField?: (() => void) | undefined;
14
14
  } & React.RefAttributes<HTMLInputElement>>;
15
+ export {};
@@ -8,7 +8,7 @@ import React from "react";
8
8
  * bundle the svg assets used here, and we end up with some broken style.
9
9
  */
10
10
  import "./Select.scss";
11
- import { FormFieldWidth } from "../Form/form.types";
11
+ type FormFieldWidth = "sm" | "md" | "lg" | "xl" | "full";
12
12
  interface OptionMinimal {
13
13
  value: any;
14
14
  label?: string;
package/dist/index.d.ts CHANGED
@@ -77,7 +77,6 @@ export { ViewItem, type ViewItemProps } from "./components/ViewItem/ViewItem";
77
77
  export { UnorderedList, UList } from "./components/UnorderedList/UnorderedList";
78
78
  export { default as Text } from "./components/Text/Text";
79
79
  export { SearchInput, type SearchInputProps, } from "./components/Input/SearchInput";
80
- export { GenericForm, Form, type FormProps, type GenericFormProps, } from "./components/Form/Form";
81
80
  export { Icon } from "./components/Icon";
82
81
  export type { IconProps, IconKey, } from "./components/Icons/types/IconProps.type";
83
82
  export * from "./components/Icons";
@@ -23,8 +23,6 @@ var debounce = require('lodash.debounce');
23
23
  var reactLazyLoadImageComponent = require('react-lazy-load-image-component');
24
24
  var ReactQuill = require('react-quill');
25
25
  require('react-quill/dist/quill.snow.css');
26
- var pick = require('lodash/pick');
27
- var index_ie11 = require('react-hook-form/dist/index.ie11');
28
26
  var react = require('@headlessui/react');
29
27
  var solid = require('@heroicons/react/20/solid');
30
28
  var ToggleGroup = require('@radix-ui/react-toggle-group');
@@ -63,7 +61,6 @@ var ReactSelect__default = /*#__PURE__*/_interopDefault(ReactSelect);
63
61
  var groupBy__default = /*#__PURE__*/_interopDefault(groupBy);
64
62
  var debounce__default = /*#__PURE__*/_interopDefault(debounce);
65
63
  var ReactQuill__default = /*#__PURE__*/_interopDefault(ReactQuill);
66
- var pick__default = /*#__PURE__*/_interopDefault(pick);
67
64
  var ToggleGroup__namespace = /*#__PURE__*/_interopNamespace(ToggleGroup);
68
65
 
69
66
  /******************************************************************************
@@ -5338,215 +5335,6 @@ UnorderedList.Item = Item;
5338
5335
  UnorderedList.Padding = Padding$1;
5339
5336
  UnorderedList.Indent = Indent;
5340
5337
 
5341
- const FormFieldErrorMessages = (props) => {
5342
- const { fieldName, error } = props;
5343
- const fieldErrors = error[fieldName];
5344
- if (!(fieldErrors === null || fieldErrors === void 0 ? void 0 : fieldErrors.types)) {
5345
- return null;
5346
- }
5347
- return React__namespace.default.createElement("div", { className: "ui-mt-1 ui-space-y-1" }, Object.entries(fieldErrors.types).map(([errorKey, errorMessage]) => React__namespace.default.createElement(Text, { key: `${fieldName}-${errorKey}`, text: errorMessage, color: "red", type: "sm" })));
5348
- };
5349
-
5350
- function FormFieldLabeler({ name, children, label, fieldRequired, info, fieldErrors, decoratorClassname }) {
5351
- return React__namespace.default.createElement(
5352
- "div",
5353
- { className: classNames__default.default(decoratorClassname) },
5354
- label && React__namespace.default.createElement(
5355
- "label",
5356
- { className: "cweb-form-field-label ui-mb-1 ui-block", htmlFor: name, "data-is-required": fieldRequired },
5357
- React__namespace.default.createElement(Text, { className: "cweb-form-field-label-text", inline: true, text: label })
5358
- ),
5359
- React__namespace.default.createElement("fieldset", { className: "cweb-form-fieldset" }, children),
5360
- info && React__namespace.default.createElement(Text, { className: "cweb-form-info-text ui-mt-1", type: "sm", color: "slate-500", text: info }),
5361
- React__namespace.default.createElement(FormFieldErrorMessages, { fieldName: name, error: fieldErrors })
5362
- );
5363
- }
5364
-
5365
- const hasError = (name, errors) => {
5366
- return !!(name && errors && name in errors);
5367
- };
5368
- const isRequired = (options) => {
5369
- return !!(options && "required" in options);
5370
- };
5371
-
5372
- const FormInput = React__namespace.default.forwardRef((_a, innerRef) => {
5373
- var { control, name, rules, fieldErrors, fieldRequired, label, info, decoratorClassname } = _a, fieldProps = __rest(_a, ["control", "name", "rules", "fieldErrors", "fieldRequired", "label", "info", "decoratorClassname"]);
5374
- return React__namespace.default.createElement(
5375
- FormFieldLabeler,
5376
- { name, fieldErrors, fieldRequired, label, info, decoratorClassname },
5377
- React__namespace.default.createElement(index_ie11.Controller, { name, control, rules, render: (field) => React__namespace.default.createElement(Input, Object.assign({}, fieldProps, field, { isError: hasError(name, fieldErrors), asFormField: true, ref: innerRef })) })
5378
- );
5379
- });
5380
-
5381
- const FormRadioGroup = React__namespace.default.forwardRef((_a, innerRef) => {
5382
- var { control, name, rules, fieldErrors, fieldRequired, label, info, decoratorClassname } = _a, fieldProps = __rest(_a, ["control", "name", "rules", "fieldErrors", "fieldRequired", "label", "info", "decoratorClassname"]);
5383
- return React__namespace.default.createElement(
5384
- FormFieldLabeler,
5385
- { name, fieldErrors, fieldRequired, label, info, decoratorClassname },
5386
- React__namespace.default.createElement(index_ie11.Controller, { name, control, rules, render: ({ onChange, value }) => {
5387
- return React__namespace.default.createElement(RadioGroupV2, Object.assign({}, fieldProps, { options: fieldProps.options.map((option) => Object.assign(Object.assign({}, option), { checked: value === option.value })), isError: hasError(name, fieldErrors), ref: innerRef, name, onChange }));
5388
- } })
5389
- );
5390
- });
5391
-
5392
- const FormSelect = React__namespace.default.forwardRef((_a, innerRef) => {
5393
- var { control, name, rules, fieldErrors, fieldRequired, label, info, decoratorClassname } = _a, selectProps = __rest(_a, ["control", "name", "rules", "fieldErrors", "fieldRequired", "label", "info", "decoratorClassname"]);
5394
- return React__namespace.default.createElement(
5395
- FormFieldLabeler,
5396
- { name, fieldErrors, fieldRequired, label, info, decoratorClassname },
5397
- React__namespace.default.createElement(index_ie11.Controller, { name, control, rules, render: (field) => React__namespace.default.createElement(Select, Object.assign({}, selectProps, field, { isError: hasError(name, fieldErrors), ref: innerRef })) })
5398
- );
5399
- });
5400
-
5401
- const FormImagePicker = React__namespace.default.forwardRef((_a, innerRef) => {
5402
- var { control, name, rules, fieldErrors, fieldRequired, label, info, decoratorClassname } = _a, fieldProps = __rest(_a, ["control", "name", "rules", "fieldErrors", "fieldRequired", "label", "info", "decoratorClassname"]);
5403
- return React__namespace.default.createElement(
5404
- FormFieldLabeler,
5405
- { name, fieldErrors, fieldRequired, label, info, decoratorClassname },
5406
- React__namespace.default.createElement(index_ie11.Controller, { name, control, rules, render: (field) => {
5407
- var _a2;
5408
- if (fieldProps.preselectedMedia && !field.value) {
5409
- field.onChange({
5410
- target: { name, value: fieldProps.preselectedMedia }
5411
- });
5412
- }
5413
- return React__namespace.default.createElement(MediaPicker, Object.assign({}, fieldProps, field, { media: fieldProps.media, onChange: (e) => {
5414
- var _a3;
5415
- field.onChange(e.target.value);
5416
- (_a3 = fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.onChange) === null || _a3 === void 0 ? void 0 : _a3.call(fieldProps, e);
5417
- }, preselectedMedia: (_a2 = field.value) !== null && _a2 !== void 0 ? _a2 : fieldProps.preselectedMedia, ref: innerRef }));
5418
- } })
5419
- );
5420
- });
5421
-
5422
- const FormFieldCheckbox = React__namespace.default.forwardRef((_a, innerRef) => {
5423
- var { control, name, rules, fieldErrors, fieldRequired, label, info, decoratorClassname } = _a, fieldProps = __rest(_a, ["control", "name", "rules", "fieldErrors", "fieldRequired", "label", "info", "decoratorClassname"]);
5424
- return React__namespace.default.createElement(
5425
- FormFieldLabeler,
5426
- { name, fieldErrors, fieldRequired, label: "", info, decoratorClassname },
5427
- React__namespace.default.createElement(index_ie11.Controller, { name, control, rules, render: ({ onChange, value }) => {
5428
- return React__namespace.default.createElement(Checkbox, Object.assign({}, fieldProps, {
5429
- // Might be a tech debt due to how we named this
5430
- // but the field type is always a checkbox, its shape
5431
- // or style is what changes. The name `variant` was added
5432
- // to the props to avoid confusion.
5433
- type: fieldProps.variant,
5434
- isChecked: value,
5435
- error: hasError(name, fieldErrors),
5436
- ref: innerRef,
5437
- name,
5438
- onChange: (event) => {
5439
- onChange(event.target.checked);
5440
- },
5441
- text: label,
5442
- value
5443
- }));
5444
- } })
5445
- );
5446
- });
5447
-
5448
- const FormFieldCheckboxList = ({ control, name, rules, fieldErrors, fieldRequired, label, info, decoratorClassname, fieldProps = { groups: [], onChange: () => void 0 } }) => {
5449
- return React__namespace.default.createElement(
5450
- FormFieldLabeler,
5451
- { name, fieldErrors, fieldRequired, label, info, decoratorClassname },
5452
- React__namespace.default.createElement(index_ie11.Controller, { name, control, rules, render: ({ onChange, value }) => {
5453
- const { className } = fieldProps;
5454
- const [checkboxListValues, setCheckboxListValues] = React.useState(value);
5455
- React.useEffect(() => {
5456
- setCheckboxListValues(value);
5457
- }, [value]);
5458
- return React__namespace.default.createElement(CheckboxList, { groups: checkboxListValues, className, onChange: (event) => {
5459
- setCheckboxListValues((previousState) => {
5460
- const newState = previousState.map((group) => {
5461
- const newItems = group.items.map((item) => {
5462
- if (item.id === event.id) {
5463
- return Object.assign(Object.assign({}, item), { isChecked: event.newCheckedValue });
5464
- } else {
5465
- return item;
5466
- }
5467
- });
5468
- return Object.assign(Object.assign({}, group), { items: newItems });
5469
- });
5470
- onChange(newState);
5471
- return newState;
5472
- });
5473
- } });
5474
- } })
5475
- );
5476
- };
5477
-
5478
- const FormTextarea = React__namespace.default.forwardRef((_a, innerRef) => {
5479
- var { control, name, rules, fieldErrors, fieldRequired, label, info, decoratorClassname } = _a, fieldProps = __rest(_a, ["control", "name", "rules", "fieldErrors", "fieldRequired", "label", "info", "decoratorClassname"]);
5480
- return React__namespace.default.createElement(
5481
- FormFieldLabeler,
5482
- { name, fieldErrors, fieldRequired, label, info, decoratorClassname },
5483
- React__namespace.default.createElement(index_ie11.Controller, { name, control, rules, render: (field) => React__namespace.default.createElement(Textarea, Object.assign({}, fieldProps, field, { isError: hasError(name, fieldErrors), ref: innerRef })) })
5484
- );
5485
- });
5486
-
5487
- function GenericForm({ fields, onValid, onError, defaultValues }) {
5488
- const useFormReturn = index_ie11.useForm({
5489
- criteriaMode: "all",
5490
- defaultValues
5491
- });
5492
- React.useEffect(() => {
5493
- if (defaultValues) {
5494
- useFormReturn.reset(defaultValues);
5495
- }
5496
- }, [defaultValues]);
5497
- const { handleSubmit } = useFormReturn;
5498
- return React__namespace.default.createElement(
5499
- "div",
5500
- { className: "ui-space-y-6" },
5501
- React__namespace.default.createElement(Form, { fields, useFormReturn }),
5502
- React__namespace.default.createElement(PrimaryButton, { onClick: handleSubmit(onValid, onError), text: "submit" })
5503
- );
5504
- }
5505
- function Form({ fields, useFormReturn }) {
5506
- return React__namespace.default.createElement("div", { className: "ui-space-y-6" }, fields.map((props) => FormFieldMapper(props, useFormReturn)));
5507
- }
5508
- function FormFieldMapper(formFieldProps, useFormReturn) {
5509
- const { type, name, options, fieldProps = {} } = formFieldProps;
5510
- const decoratorProps = pick__default.default(formFieldProps, [
5511
- "label",
5512
- "info",
5513
- "decoratorClassname"
5514
- ]);
5515
- const { control, formState: { errors } } = useFormReturn;
5516
- switch (type) {
5517
- case "row":
5518
- return React__namespace.default.createElement(FlexRow, { key: formFieldProps.key }, formFieldProps.fields.map((field) => FormFieldMapper(Object.assign({ decoratorClassname: "ui-flex-auto" }, field), useFormReturn)));
5519
- case "text":
5520
- case "number":
5521
- case "email":
5522
- case "password":
5523
- return React__namespace.default.createElement(FormInput, Object.assign({ key: name, name }, decoratorProps, { fieldRequired: isRequired(options), fieldErrors: errors }, fieldProps, { control, rules: options, type }));
5524
- case "select":
5525
- return React__namespace.default.createElement(FormSelect, Object.assign({ key: name }, decoratorProps, { fieldRequired: isRequired(options), fieldErrors: errors }, fieldProps, { control, rules: options, name }));
5526
- case "mediaPicker":
5527
- return React__namespace.default.createElement(FormImagePicker, Object.assign({ key: name }, decoratorProps, { fieldRequired: isRequired(options), fieldErrors: errors }, fieldProps, { control, rules: options, name }));
5528
- case "radioGroup": {
5529
- return React__namespace.default.createElement(FormRadioGroup, Object.assign({ key: name }, decoratorProps, { fieldRequired: isRequired(options), fieldErrors: errors }, fieldProps, { name, rules: options, control }));
5530
- }
5531
- case "checkbox": {
5532
- return React__namespace.default.createElement(FormFieldCheckbox, Object.assign({ key: name }, decoratorProps, { fieldRequired: isRequired(options), fieldErrors: errors }, fieldProps, { type: "checkbox", name, rules: options, control }));
5533
- }
5534
- case "checkboxlist": {
5535
- return React__namespace.default.createElement(FormFieldCheckboxList, Object.assign({ key: name }, decoratorProps, { fieldRequired: isRequired(options), fieldErrors: errors, type: "checkboxlist", name, rules: options, control, fieldProps }));
5536
- }
5537
- case "textarea": {
5538
- return React__namespace.default.createElement(FormTextarea, Object.assign({ key: name }, decoratorProps, { fieldRequired: isRequired(options), fieldErrors: errors, type: "textarea", name, rules: options, control }, fieldProps));
5539
- }
5540
- case "title": {
5541
- return React__namespace.default.createElement(Title, Object.assign({ key: name }, fieldProps));
5542
- }
5543
- case "void":
5544
- return null;
5545
- default:
5546
- return null;
5547
- }
5548
- }
5549
-
5550
5338
  const FullPageModalHeader = ({ primaryButtonProps, actions, title }) => {
5551
5339
  return React__namespace.default.createElement(
5552
5340
  "div",
@@ -6160,12 +5948,10 @@ exports.FirstAidKitIcon = FirstAidKitIcon;
6160
5948
  exports.FlagIcon = FlagIcon;
6161
5949
  exports.FlexColumn = FlexColumn;
6162
5950
  exports.FlexRow = FlexRow;
6163
- exports.Form = Form;
6164
5951
  exports.ForwardIcon = ForwardIcon;
6165
5952
  exports.FullPageModal = FullPageModal;
6166
5953
  exports.GearColoredIcon = GearColoredIcon;
6167
5954
  exports.GearIcon = CogwheelIcon;
6168
- exports.GenericForm = GenericForm;
6169
5955
  exports.GroupColoredIcon = GroupColoredIcon;
6170
5956
  exports.GroupIcon = GroupIcon;
6171
5957
  exports.GroupOfThreeIcon = GroupOfThreeIcon;