@canonical/react-components 0.50.6 → 0.51.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.
@@ -24,5 +24,10 @@ export declare const Highlighted: {
24
24
  };
25
25
  };
26
26
  export declare const Overlay: {
27
- render: () => React.JSX.Element;
27
+ args: {
28
+ title: string;
29
+ overlay: boolean;
30
+ children: string;
31
+ };
32
+ render: (args: any) => React.JSX.Element;
28
33
  };
@@ -35,7 +35,12 @@ const Highlighted = exports.Highlighted = {
35
35
  }
36
36
  };
37
37
  const Overlay = exports.Overlay = {
38
- render: () => /*#__PURE__*/_react.default.createElement("section", {
38
+ args: {
39
+ title: "Web browsing",
40
+ overlay: true,
41
+ children: "Renowned for speed and security, Ubuntu and Firefox make browsing\nthe web a pleasure again. Ubuntu also includes Chrome, Opera and\nother browsers that can be installed from the Ubuntu Software\nCentre."
42
+ },
43
+ render: args => /*#__PURE__*/_react.default.createElement("section", {
39
44
  className: "p-strip--image is-light",
40
45
  style: {
41
46
  backgroundImage: "url('https://assets.ubuntu.com/v1/0a98afcd-screenshot_desktop.jpg')"
@@ -43,8 +48,5 @@ const Overlay = exports.Overlay = {
43
48
  }, /*#__PURE__*/_react.default.createElement(_Row.default, null, /*#__PURE__*/_react.default.createElement(_Col.default, {
44
49
  size: 6,
45
50
  emptyLarge: 7
46
- }, /*#__PURE__*/_react.default.createElement(_.default, {
47
- title: "Web browsing",
48
- overlay: true
49
- }, "Renowned for speed and security, Ubuntu and Firefox make browsing the web a pleasure again. Ubuntu also includes Chrome, Opera and other browsers that can be installed from the Ubuntu Software Centre."))))
51
+ }, /*#__PURE__*/_react.default.createElement(_.default, args))))
50
52
  };
@@ -0,0 +1,26 @@
1
+ import React from "react";
2
+ import { type ComponentProps, type ComponentType, type ElementType, type HTMLProps } from "react";
3
+ import Input from "../Input";
4
+ export type Props<C extends ElementType | ComponentType = typeof Input> = {
5
+ /**
6
+ * The component to display.
7
+ * @default Input
8
+ */
9
+ component?: C;
10
+ /**
11
+ * This can be used to hide errors returned by Formik.
12
+ */
13
+ displayError?: boolean;
14
+ /**
15
+ * The name of the field as given to Formik.
16
+ */
17
+ name: string;
18
+ value?: HTMLProps<HTMLElement>["value"];
19
+ } & ComponentProps<C>;
20
+ /**
21
+ * This component makes it easier to use Vanilla form inputs with Formik. It
22
+ * makes use of Formik's context to automatically map errors, values, states
23
+ * etc. onto the provided field.
24
+ */
25
+ declare const FormikField: <C extends React.ElementType | React.ComponentType = ({ caution, className, error, help, helpClassName, id, label, labelClassName, required, stacked, success, takeFocus, takeFocusDelay, type, wrapperClassName, ...inputProps }: import("../Input").InputProps) => JSX.Element>({ component: Component, displayError, name, value, label, ...props }: Props<C>) => JSX.Element;
26
+ export default FormikField;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _formik = require("formik");
9
+ var _Input = _interopRequireDefault(require("../Input"));
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
12
+ /**
13
+ * This component makes it easier to use Vanilla form inputs with Formik. It
14
+ * makes use of Formik's context to automatically map errors, values, states
15
+ * etc. onto the provided field.
16
+ */
17
+ const FormikField = _ref => {
18
+ let {
19
+ component: Component = _Input.default,
20
+ displayError = true,
21
+ name,
22
+ value,
23
+ label,
24
+ ...props
25
+ } = _ref;
26
+ const [field, meta] = (0, _formik.useField)({
27
+ name,
28
+ type: props.type,
29
+ value
30
+ });
31
+ return /*#__PURE__*/_react.default.createElement(Component, _extends({
32
+ "aria-label": label,
33
+ error: meta.touched && displayError ? meta.error : null,
34
+ label: label
35
+ }, field, props));
36
+ };
37
+ var _default = exports.default = FormikField;
@@ -0,0 +1,8 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import FormikField from "./FormikField";
3
+ declare const meta: Meta<typeof FormikField>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof FormikField>;
6
+ export declare const Default: Story;
7
+ export declare const Fields: Story;
8
+ export declare const Errors: Story;
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.Fields = exports.Errors = exports.Default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _FormikField = _interopRequireDefault(require("./FormikField"));
9
+ var _Select = _interopRequireDefault(require("../Select"));
10
+ var _formik = require("formik");
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ const meta = {
13
+ title: "FormikField",
14
+ component: _FormikField.default,
15
+ tags: ["autodocs"]
16
+ };
17
+ var _default = exports.default = meta;
18
+ const Default = exports.Default = {
19
+ args: {
20
+ name: "username",
21
+ label: "Username",
22
+ type: "text"
23
+ },
24
+ render: args => /*#__PURE__*/_react.default.createElement(_formik.Formik, {
25
+ initialValues: {
26
+ username: ""
27
+ },
28
+ onSubmit: () => {}
29
+ }, /*#__PURE__*/_react.default.createElement(_FormikField.default, args))
30
+ };
31
+ const Fields = exports.Fields = {
32
+ args: {
33
+ component: _Select.default,
34
+ name: "release",
35
+ label: "Release",
36
+ options: [{
37
+ value: "",
38
+ disabled: true,
39
+ label: "Select an option"
40
+ }, {
41
+ value: "1",
42
+ label: "Cosmic Cuttlefish"
43
+ }, {
44
+ value: "2",
45
+ label: "Bionic Beaver"
46
+ }, {
47
+ value: "3",
48
+ label: "Xenial Xerus"
49
+ }]
50
+ },
51
+ parameters: {
52
+ docs: {
53
+ description: {
54
+ story: "\nAny React Components input can be provided to FormikField (e.g. Input, Textarea or Select) or you may provide a custom component.\n\nAny additional props that need to be passed can be given to FormikField.\n "
55
+ }
56
+ }
57
+ },
58
+ render: args => /*#__PURE__*/_react.default.createElement(_formik.Formik, {
59
+ initialValues: {
60
+ release: ""
61
+ },
62
+ onSubmit: () => {}
63
+ }, /*#__PURE__*/_react.default.createElement(_FormikField.default, args))
64
+ };
65
+ const Errors = exports.Errors = {
66
+ args: Default.args,
67
+ parameters: {
68
+ docs: {
69
+ description: {
70
+ story: "\nFormik parameters are passed to the field using Formik's `useField`. This means that validation and errors, state handlers etc. should all just work.\n "
71
+ }
72
+ }
73
+ },
74
+ render: args => /*#__PURE__*/_react.default.createElement(_formik.Formik, {
75
+ initialErrors: {
76
+ username: "This username has already been taken."
77
+ },
78
+ initialTouched: {
79
+ username: true
80
+ },
81
+ initialValues: {
82
+ username: ""
83
+ },
84
+ onSubmit: () => {}
85
+ }, /*#__PURE__*/_react.default.createElement(_FormikField.default, args))
86
+ };
@@ -0,0 +1 @@
1
+ export { default, type Props as FormikFieldProps } from "./FormikField";
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "default", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _FormikField.default;
10
+ }
11
+ });
12
+ var _FormikField = _interopRequireDefault(require("./FormikField"));
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -49,7 +49,6 @@ const Input = _ref => {
49
49
  "aria-errormessage": hasError ? validationId : null,
50
50
  "aria-invalid": hasError,
51
51
  id: inputId,
52
- label: label,
53
52
  required: required,
54
53
  ...inputProps
55
54
  };
@@ -85,9 +85,11 @@ const PaginationItemSeparator = () => /*#__PURE__*/_react.default.createElement(
85
85
  // current page and paginate function is defined. Pagination
86
86
  // is handled by paginate function and optional onForward and
87
87
  // onBack functions.
88
+
88
89
  // Used when number of items per page, number of total items,
89
90
  // current page and paginate function are undefined.
90
91
  // Pagination is handled by onForward and onBack function.
92
+
91
93
  const Pagination = _ref => {
92
94
  let {
93
95
  itemsPerPage,
package/dist/index.d.ts CHANGED
@@ -15,6 +15,7 @@ export { default as ContextualMenu } from "./components/ContextualMenu";
15
15
  export { default as EmptyState } from "./components/EmptyState";
16
16
  export { default as Field } from "./components/Field";
17
17
  export { default as Form } from "./components/Form";
18
+ export { default as FormikField } from "./components/FormikField";
18
19
  export { default as Icon, ICONS } from "./components/Icon";
19
20
  export { default as Input } from "./components/Input";
20
21
  export { default as Label } from "./components/Label";
@@ -66,6 +67,7 @@ export type { ContextualMenuProps, ContextualMenuDropdownProps, MenuLink, Positi
66
67
  export type { EmptyStateProps } from "./components/EmptyState";
67
68
  export type { FieldProps } from "./components/Field";
68
69
  export type { FormProps } from "./components/Form";
70
+ export type { FormikFieldProps } from "./components/FormikField";
69
71
  export type { IconProps } from "./components/Icon";
70
72
  export type { InputProps } from "./components/Input";
71
73
  export type { LabelProps } from "./components/Label";
package/dist/index.js CHANGED
@@ -23,6 +23,7 @@ var _exportNames = {
23
23
  EmptyState: true,
24
24
  Field: true,
25
25
  Form: true,
26
+ FormikField: true,
26
27
  Icon: true,
27
28
  ICONS: true,
28
29
  Input: true,
@@ -192,6 +193,12 @@ Object.defineProperty(exports, "Form", {
192
193
  return _Form.default;
193
194
  }
194
195
  });
196
+ Object.defineProperty(exports, "FormikField", {
197
+ enumerable: true,
198
+ get: function () {
199
+ return _FormikField.default;
200
+ }
201
+ });
195
202
  Object.defineProperty(exports, "ICONS", {
196
203
  enumerable: true,
197
204
  get: function () {
@@ -533,6 +540,7 @@ var _ContextualMenu = _interopRequireDefault(require("./components/ContextualMen
533
540
  var _EmptyState = _interopRequireDefault(require("./components/EmptyState"));
534
541
  var _Field = _interopRequireDefault(require("./components/Field"));
535
542
  var _Form = _interopRequireDefault(require("./components/Form"));
543
+ var _FormikField = _interopRequireDefault(require("./components/FormikField"));
536
544
  var _Icon = _interopRequireWildcard(require("./components/Icon"));
537
545
  var _Input = _interopRequireDefault(require("./components/Input"));
538
546
  var _Label = _interopRequireDefault(require("./components/Label"));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@canonical/react-components",
3
- "version": "0.50.6",
3
+ "version": "0.51.0",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.js",
6
6
  "author": "Huw Wilkins <huw.wilkins@canonical.com>",
@@ -66,6 +66,7 @@
66
66
  "eslint-plugin-react-hooks": "4.6.0",
67
67
  "eslint-plugin-storybook": "0.6.15",
68
68
  "eslint-plugin-testing-library": "6.2.0",
69
+ "formik": "2.4.5",
69
70
  "jest": "29.7.0",
70
71
  "npm-package-json-lint": "7.1.0",
71
72
  "prettier": "3.2.4",
@@ -111,6 +112,7 @@
111
112
  "peerDependencies": {
112
113
  "@types/react": "^17.0.2 || ^18.0.0",
113
114
  "@types/react-dom": "^17.0.2 || ^18.0.0",
115
+ "formik": "^2.4.5",
114
116
  "react": "^17.0.2 || ^18.0.0",
115
117
  "react-dom": "^17.0.2 || ^18.0.0",
116
118
  "vanilla-framework": "^3.15.1 || ^4.0.0"