@contentful/field-editor-tags 0.13.5 → 0.14.3

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/CHANGELOG.md CHANGED
@@ -3,6 +3,41 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [0.14.3](https://github.com/contentful/field-editors/compare/@contentful/field-editor-tags@0.14.2...@contentful/field-editor-tags@0.14.3) (2021-09-16)
7
+
8
+ **Note:** Version bump only for package @contentful/field-editor-tags
9
+
10
+
11
+
12
+
13
+
14
+ ## [0.14.2](https://github.com/contentful/field-editors/compare/@contentful/field-editor-tags@0.14.1...@contentful/field-editor-tags@0.14.2) (2021-08-19)
15
+
16
+ **Note:** Version bump only for package @contentful/field-editor-tags
17
+
18
+
19
+
20
+
21
+
22
+ ## [0.14.1](https://github.com/contentful/field-editors/compare/@contentful/field-editor-tags@0.14.0...@contentful/field-editor-tags@0.14.1) (2021-07-29)
23
+
24
+ **Note:** Version bump only for package @contentful/field-editor-tags
25
+
26
+
27
+
28
+
29
+
30
+ # [0.14.0](https://github.com/contentful/field-editors/compare/@contentful/field-editor-tags@0.13.5...@contentful/field-editor-tags@0.14.0) (2021-07-23)
31
+
32
+
33
+ ### Features
34
+
35
+ * 💡 new color tokens ([#778](https://github.com/contentful/field-editors/issues/778)) ([fba548d](https://github.com/contentful/field-editors/commit/fba548de32305016df7f2685634eefb14294828f))
36
+
37
+
38
+
39
+
40
+
6
41
  ## [0.13.5](https://github.com/contentful/field-editors/compare/@contentful/field-editor-tags@0.13.2...@contentful/field-editor-tags@0.13.5) (2021-07-06)
7
42
 
8
43
  **Note:** Version bump only for package @contentful/field-editor-tags
@@ -19,7 +19,7 @@ var styles = {
19
19
  constraints: /*#__PURE__*/emotion.css({
20
20
  fontStyle: 'italic',
21
21
  marginTop: tokens.spacingS,
22
- color: tokens.colorTextLight
22
+ color: tokens.gray600
23
23
  })
24
24
  };
25
25
  function TagsEditorConstraints(props) {
@@ -52,7 +52,7 @@ var styles$1 = {
52
52
  cursor: 'grab',
53
53
  userSelect: 'none',
54
54
  svg: {
55
- fill: tokens.colorTextLightest,
55
+ fill: tokens.gray500,
56
56
  verticalAlign: 'middle'
57
57
  }
58
58
  })
@@ -1 +1 @@
1
- {"version":3,"file":"field-editor-tags.cjs.development.js","sources":["../src/TagsEditorConstraints.tsx","../src/TagsEditor.tsx","../src/TagsEditorContainer.tsx","../src/index.tsx"],"sourcesContent":["import React from 'react';\nimport { css } from 'emotion';\nimport { Paragraph } from '@contentful/forma-36-react-components';\nimport tokens from '@contentful/forma-36-tokens';\nimport { Constraint, ConstraintsType } from './types';\n\nconst styles = {\n constraints: css({\n fontStyle: 'italic',\n marginTop: tokens.spacingS,\n color: tokens.colorTextLight,\n }),\n};\n\ninterface TagEditorConstraintsProps {\n constraintsType: ConstraintsType;\n constraints: Constraint;\n}\n\nexport function TagsEditorConstraints(props: TagEditorConstraintsProps) {\n const { constraintsType, constraints } = props;\n return (\n <Paragraph className={styles.constraints} testId=\"tag-editor-constraints\">\n {constraintsType === 'min' && (\n <span>\n Requires at least {constraints.min} {constraints.min === 1 ? 'tag' : 'tags'}\n </span>\n )}\n {constraintsType === 'max' && (\n <span>\n Requires no more than {constraints.max} {constraints.max === 1 ? 'tag' : 'tags'}\n </span>\n )}\n {constraintsType === 'min-max' && constraints.max !== constraints.min && (\n <span>\n Requires between {constraints.min} and {constraints.max} tags\n </span>\n )}\n {constraintsType === 'min-max' && constraints.max === constraints.min && (\n <span>\n Requires exactly {constraints.max} {constraints.max === 1 ? 'tag' : 'tags'}\n </span>\n )}\n </Paragraph>\n );\n}\n","import noop from 'lodash/noop';\nimport React, { useState, useCallback } from 'react';\nimport { css } from 'emotion';\nimport tokens from '@contentful/forma-36-tokens';\nimport { TextInput, Pill, Icon } from '@contentful/forma-36-react-components';\nimport { TagsEditorConstraints } from './TagsEditorConstraints';\nimport { ConstraintsType, Constraint } from './types';\nimport { SortableContainer, SortableElement, SortableHandle } from 'react-sortable-hoc';\nimport arrayMove from 'array-move';\n\nexport interface TagsEditorProps {\n items: string[];\n isDisabled: boolean;\n hasError: boolean;\n constraintsType?: ConstraintsType;\n constraints?: Constraint;\n onUpdate: (items: string[]) => void;\n}\n\nconst styles = {\n dropContainer: css({\n whiteSpace: 'nowrap',\n display: 'flex',\n flexWrap: 'wrap',\n }),\n input: css({\n marginTop: tokens.spacingS,\n marginBottom: tokens.spacingM,\n }),\n pill: css({\n marginRight: tokens.spacingS,\n marginBottom: tokens.spacingS,\n }),\n handle: css({\n lineHeight: '1.5rem',\n padding: '0.375rem 0.625rem',\n paddingRight: 0,\n cursor: 'grab',\n userSelect: 'none',\n svg: {\n fill: tokens.colorTextLightest,\n verticalAlign: 'middle',\n },\n }),\n};\n\nconst SortablePillHandle = SortableHandle(() => (\n <div className={styles.handle}>\n <Icon icon=\"Drag\" color=\"muted\" />\n </div>\n));\n\ninterface SortablePillProps {\n label: string;\n onRemove: Function;\n disabled: boolean;\n index: number;\n}\n\nconst SortablePill = SortableElement((props: SortablePillProps) => (\n <Pill\n testId=\"tag-editor-pill\"\n className={styles.pill}\n label={props.label}\n onClose={() => {\n if (!props.disabled) {\n props.onRemove(props.index);\n }\n }}\n onDrag={noop}\n dragHandleComponent={<SortablePillHandle />}\n />\n));\n\ninterface SortableListProps {\n children: React.ReactNode;\n}\n\nconst SortableList = SortableContainer((props: SortableListProps) => (\n <div className={styles.dropContainer}>{props.children}</div>\n));\n\nexport function TagsEditor(props: TagsEditorProps) {\n const [pendingValue, setPendingValue] = useState('');\n\n const { isDisabled, items, constraints, constraintsType, hasError } = props;\n\n const removeItem = useCallback(\n (index) => {\n const newItems = props.items.filter((_, filterIndex) => index !== filterIndex);\n props.onUpdate(newItems);\n },\n [props]\n );\n\n const swapItems = useCallback(\n ({ oldIndex, newIndex }) => {\n const newItems = arrayMove(props.items, oldIndex, newIndex);\n props.onUpdate(newItems);\n },\n [props]\n );\n\n return (\n <div data-test-id=\"tag-editor-container\">\n <TextInput\n testId=\"tag-editor-input\"\n className={styles.input}\n disabled={isDisabled}\n error={hasError}\n type=\"text\"\n value={pendingValue}\n placeholder=\"Type the value and hit enter\"\n onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => {\n if (pendingValue && e.keyCode === 13) {\n props.onUpdate([...props.items, pendingValue]);\n setPendingValue('');\n }\n }}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setPendingValue(e.target.value);\n }}\n />\n <SortableList\n useDragHandle\n axis=\"xy\"\n distance={10}\n onSortEnd={({ oldIndex, newIndex }) => {\n swapItems({ oldIndex, newIndex });\n }}>\n {items.map((item, index) => {\n return (\n <SortablePill\n label={item}\n index={index}\n key={item + index}\n disabled={isDisabled}\n onRemove={() => {\n removeItem(index);\n }}\n />\n );\n })}\n </SortableList>\n {constraints && constraintsType && (\n <TagsEditorConstraints constraints={constraints} constraintsType={constraintsType} />\n )}\n </div>\n );\n}\n","import * as React from 'react';\nimport isNumber from 'lodash/isNumber';\nimport { FieldAPI, FieldConnector } from '@contentful/field-editor-shared';\nimport { TagsEditor } from './TagsEditor';\nimport { ConstraintsType, Constraint } from './types';\n\nexport interface TagsEditorContainerProps {\n /**\n * is the field disabled initially\n */\n isInitiallyDisabled: boolean;\n /**\n * sdk.field\n */\n field: FieldAPI;\n}\n\ntype TagEditorValue = string[];\n\nfunction isEmptyTagsValue(value: TagEditorValue | null) {\n return value === null || value.length === 0;\n}\n\nfunction getConstraintsType(sizeConstraints?: Constraint): ConstraintsType | undefined {\n if (!sizeConstraints) {\n return undefined;\n }\n if (isNumber(sizeConstraints.min) && isNumber(sizeConstraints.max)) {\n return 'min-max';\n } else if (isNumber(sizeConstraints.min)) {\n return 'min';\n } else if (isNumber(sizeConstraints.max)) {\n return 'max';\n } else {\n return undefined;\n }\n}\n\nexport function TagsEditorContainer(props: TagsEditorContainerProps) {\n const field = props.field;\n\n const validations = field.validations || [];\n\n const sizeValidations = (validations as { size?: Constraint }[])\n .filter((validation) => validation.size)\n .map((validation) => validation.size);\n\n const constraints = sizeValidations.length > 0 ? sizeValidations[0] : {};\n\n const constraintsType = getConstraintsType(constraints);\n\n return (\n <FieldConnector<TagEditorValue>\n field={field}\n isInitiallyDisabled={props.isInitiallyDisabled}\n isEmptyValue={isEmptyTagsValue}\n throttle={0}>\n {({ disabled, value, errors, setValue }) => {\n const items = value || [];\n return (\n <TagsEditor\n constraints={constraints}\n constraintsType={constraintsType}\n isDisabled={disabled}\n hasError={errors.length > 0}\n items={items}\n onUpdate={(items) => {\n setValue(items);\n }}\n />\n );\n }}\n </FieldConnector>\n );\n}\n\nTagsEditorContainer.defaultProps = {\n isInitiallyDisabled: true,\n};\n","import { TagsEditorContainer } from './TagsEditorContainer';\n\nexport const TagsEditor = TagsEditorContainer;\n"],"names":["styles","constraints","css","fontStyle","marginTop","tokens","spacingS","color","colorTextLight","TagsEditorConstraints","props","constraintsType","React","Paragraph","className","testId","min","max","dropContainer","whiteSpace","display","flexWrap","input","marginBottom","spacingM","pill","marginRight","handle","lineHeight","padding","paddingRight","cursor","userSelect","svg","fill","colorTextLightest","verticalAlign","SortablePillHandle","SortableHandle","Icon","icon","SortablePill","SortableElement","Pill","label","onClose","disabled","onRemove","index","onDrag","noop","dragHandleComponent","SortableList","SortableContainer","children","TagsEditor","useState","pendingValue","setPendingValue","isDisabled","items","hasError","removeItem","useCallback","newItems","filter","_","filterIndex","onUpdate","swapItems","oldIndex","newIndex","arrayMove","TextInput","error","type","value","placeholder","onKeyDown","e","keyCode","onChange","target","useDragHandle","axis","distance","onSortEnd","map","item","key","isEmptyTagsValue","length","getConstraintsType","sizeConstraints","undefined","isNumber","TagsEditorContainer","field","validations","sizeValidations","validation","size","FieldConnector","isInitiallyDisabled","isEmptyValue","throttle","errors","setValue","defaultProps"],"mappings":"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"}
1
+ {"version":3,"file":"field-editor-tags.cjs.development.js","sources":["../src/TagsEditorConstraints.tsx","../src/TagsEditor.tsx","../src/TagsEditorContainer.tsx","../src/index.tsx"],"sourcesContent":["import React from 'react';\nimport { css } from 'emotion';\nimport { Paragraph } from '@contentful/forma-36-react-components';\nimport tokens from '@contentful/forma-36-tokens';\nimport { Constraint, ConstraintsType } from './types';\n\nconst styles = {\n constraints: css({\n fontStyle: 'italic',\n marginTop: tokens.spacingS,\n color: tokens.gray600,\n }),\n};\n\ninterface TagEditorConstraintsProps {\n constraintsType: ConstraintsType;\n constraints: Constraint;\n}\n\nexport function TagsEditorConstraints(props: TagEditorConstraintsProps) {\n const { constraintsType, constraints } = props;\n return (\n <Paragraph className={styles.constraints} testId=\"tag-editor-constraints\">\n {constraintsType === 'min' && (\n <span>\n Requires at least {constraints.min} {constraints.min === 1 ? 'tag' : 'tags'}\n </span>\n )}\n {constraintsType === 'max' && (\n <span>\n Requires no more than {constraints.max} {constraints.max === 1 ? 'tag' : 'tags'}\n </span>\n )}\n {constraintsType === 'min-max' && constraints.max !== constraints.min && (\n <span>\n Requires between {constraints.min} and {constraints.max} tags\n </span>\n )}\n {constraintsType === 'min-max' && constraints.max === constraints.min && (\n <span>\n Requires exactly {constraints.max} {constraints.max === 1 ? 'tag' : 'tags'}\n </span>\n )}\n </Paragraph>\n );\n}\n","import noop from 'lodash/noop';\nimport React, { useState, useCallback } from 'react';\nimport { css } from 'emotion';\nimport tokens from '@contentful/forma-36-tokens';\nimport { TextInput, Pill, Icon } from '@contentful/forma-36-react-components';\nimport { TagsEditorConstraints } from './TagsEditorConstraints';\nimport { ConstraintsType, Constraint } from './types';\nimport { SortableContainer, SortableElement, SortableHandle } from 'react-sortable-hoc';\nimport arrayMove from 'array-move';\n\nexport interface TagsEditorProps {\n items: string[];\n isDisabled: boolean;\n hasError: boolean;\n constraintsType?: ConstraintsType;\n constraints?: Constraint;\n onUpdate: (items: string[]) => void;\n}\n\nconst styles = {\n dropContainer: css({\n whiteSpace: 'nowrap',\n display: 'flex',\n flexWrap: 'wrap',\n }),\n input: css({\n marginTop: tokens.spacingS,\n marginBottom: tokens.spacingM,\n }),\n pill: css({\n marginRight: tokens.spacingS,\n marginBottom: tokens.spacingS,\n }),\n handle: css({\n lineHeight: '1.5rem',\n padding: '0.375rem 0.625rem',\n paddingRight: 0,\n cursor: 'grab',\n userSelect: 'none',\n svg: {\n fill: tokens.gray500,\n verticalAlign: 'middle',\n },\n }),\n};\n\nconst SortablePillHandle = SortableHandle(() => (\n <div className={styles.handle}>\n <Icon icon=\"Drag\" color=\"muted\" />\n </div>\n));\n\ninterface SortablePillProps {\n label: string;\n onRemove: Function;\n disabled: boolean;\n index: number;\n}\n\nconst SortablePill = SortableElement((props: SortablePillProps) => (\n <Pill\n testId=\"tag-editor-pill\"\n className={styles.pill}\n label={props.label}\n onClose={() => {\n if (!props.disabled) {\n props.onRemove(props.index);\n }\n }}\n onDrag={noop}\n dragHandleComponent={<SortablePillHandle />}\n />\n));\n\ninterface SortableListProps {\n children: React.ReactNode;\n}\n\nconst SortableList = SortableContainer((props: SortableListProps) => (\n <div className={styles.dropContainer}>{props.children}</div>\n));\n\nexport function TagsEditor(props: TagsEditorProps) {\n const [pendingValue, setPendingValue] = useState('');\n\n const { isDisabled, items, constraints, constraintsType, hasError } = props;\n\n const removeItem = useCallback(\n (index) => {\n const newItems = props.items.filter((_, filterIndex) => index !== filterIndex);\n props.onUpdate(newItems);\n },\n [props]\n );\n\n const swapItems = useCallback(\n ({ oldIndex, newIndex }) => {\n const newItems = arrayMove(props.items, oldIndex, newIndex);\n props.onUpdate(newItems);\n },\n [props]\n );\n\n return (\n <div data-test-id=\"tag-editor-container\">\n <TextInput\n testId=\"tag-editor-input\"\n className={styles.input}\n disabled={isDisabled}\n error={hasError}\n type=\"text\"\n value={pendingValue}\n placeholder=\"Type the value and hit enter\"\n onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => {\n if (pendingValue && e.keyCode === 13) {\n props.onUpdate([...props.items, pendingValue]);\n setPendingValue('');\n }\n }}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setPendingValue(e.target.value);\n }}\n />\n <SortableList\n useDragHandle\n axis=\"xy\"\n distance={10}\n onSortEnd={({ oldIndex, newIndex }) => {\n swapItems({ oldIndex, newIndex });\n }}>\n {items.map((item, index) => {\n return (\n <SortablePill\n label={item}\n index={index}\n key={item + index}\n disabled={isDisabled}\n onRemove={() => {\n removeItem(index);\n }}\n />\n );\n })}\n </SortableList>\n {constraints && constraintsType && (\n <TagsEditorConstraints constraints={constraints} constraintsType={constraintsType} />\n )}\n </div>\n );\n}\n","import * as React from 'react';\nimport isNumber from 'lodash/isNumber';\nimport { FieldAPI, FieldConnector } from '@contentful/field-editor-shared';\nimport { TagsEditor } from './TagsEditor';\nimport { ConstraintsType, Constraint } from './types';\n\nexport interface TagsEditorContainerProps {\n /**\n * is the field disabled initially\n */\n isInitiallyDisabled: boolean;\n /**\n * sdk.field\n */\n field: FieldAPI;\n}\n\ntype TagEditorValue = string[];\n\nfunction isEmptyTagsValue(value: TagEditorValue | null) {\n return value === null || value.length === 0;\n}\n\nfunction getConstraintsType(sizeConstraints?: Constraint): ConstraintsType | undefined {\n if (!sizeConstraints) {\n return undefined;\n }\n if (isNumber(sizeConstraints.min) && isNumber(sizeConstraints.max)) {\n return 'min-max';\n } else if (isNumber(sizeConstraints.min)) {\n return 'min';\n } else if (isNumber(sizeConstraints.max)) {\n return 'max';\n } else {\n return undefined;\n }\n}\n\nexport function TagsEditorContainer(props: TagsEditorContainerProps) {\n const field = props.field;\n\n const validations = field.validations || [];\n\n const sizeValidations = (validations as { size?: Constraint }[])\n .filter((validation) => validation.size)\n .map((validation) => validation.size);\n\n const constraints = sizeValidations.length > 0 ? sizeValidations[0] : {};\n\n const constraintsType = getConstraintsType(constraints);\n\n return (\n <FieldConnector<TagEditorValue>\n field={field}\n isInitiallyDisabled={props.isInitiallyDisabled}\n isEmptyValue={isEmptyTagsValue}\n throttle={0}>\n {({ disabled, value, errors, setValue }) => {\n const items = value || [];\n return (\n <TagsEditor\n constraints={constraints}\n constraintsType={constraintsType}\n isDisabled={disabled}\n hasError={errors.length > 0}\n items={items}\n onUpdate={(items) => {\n setValue(items);\n }}\n />\n );\n }}\n </FieldConnector>\n );\n}\n\nTagsEditorContainer.defaultProps = {\n isInitiallyDisabled: true,\n};\n","import { TagsEditorContainer } from './TagsEditorContainer';\n\nexport const TagsEditor = TagsEditorContainer;\n"],"names":["styles","constraints","css","fontStyle","marginTop","tokens","spacingS","color","gray600","TagsEditorConstraints","props","constraintsType","React","Paragraph","className","testId","min","max","dropContainer","whiteSpace","display","flexWrap","input","marginBottom","spacingM","pill","marginRight","handle","lineHeight","padding","paddingRight","cursor","userSelect","svg","fill","gray500","verticalAlign","SortablePillHandle","SortableHandle","Icon","icon","SortablePill","SortableElement","Pill","label","onClose","disabled","onRemove","index","onDrag","noop","dragHandleComponent","SortableList","SortableContainer","children","TagsEditor","useState","pendingValue","setPendingValue","isDisabled","items","hasError","removeItem","useCallback","newItems","filter","_","filterIndex","onUpdate","swapItems","oldIndex","newIndex","arrayMove","TextInput","error","type","value","placeholder","onKeyDown","e","keyCode","onChange","target","useDragHandle","axis","distance","onSortEnd","map","item","key","isEmptyTagsValue","length","getConstraintsType","sizeConstraints","undefined","isNumber","TagsEditorContainer","field","validations","sizeValidations","validation","size","FieldConnector","isInitiallyDisabled","isEmptyValue","throttle","errors","setValue","defaultProps"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var t=require("react"),n=e(t),a=e(require("lodash/isNumber")),r=require("@contentful/field-editor-shared"),i=e(require("lodash/noop")),l=require("emotion"),o=e(require("@contentful/forma-36-tokens")),s=require("@contentful/forma-36-react-components"),c=require("react-sortable-hoc"),u=e(require("array-move")),d={constraints:l.css({fontStyle:"italic",marginTop:o.spacingS,color:o.colorTextLight})};function m(e){var t=e.constraintsType,a=e.constraints;return n.createElement(s.Paragraph,{className:d.constraints,testId:"tag-editor-constraints"},"min"===t&&n.createElement("span",null,"Requires at least ",a.min," ",1===a.min?"tag":"tags"),"max"===t&&n.createElement("span",null,"Requires no more than ",a.max," ",1===a.max?"tag":"tags"),"min-max"===t&&a.max!==a.min&&n.createElement("span",null,"Requires between ",a.min," and ",a.max," tags"),"min-max"===t&&a.max===a.min&&n.createElement("span",null,"Requires exactly ",a.max," ",1===a.max?"tag":"tags"))}var p={dropContainer:l.css({whiteSpace:"nowrap",display:"flex",flexWrap:"wrap"}),input:l.css({marginTop:o.spacingS,marginBottom:o.spacingM}),pill:l.css({marginRight:o.spacingS,marginBottom:o.spacingS}),handle:l.css({lineHeight:"1.5rem",padding:"0.375rem 0.625rem",paddingRight:0,cursor:"grab",userSelect:"none",svg:{fill:o.colorTextLightest,verticalAlign:"middle"}})},f=c.SortableHandle((function(){return n.createElement("div",{className:p.handle},n.createElement(s.Icon,{icon:"Drag",color:"muted"}))})),g=c.SortableElement((function(e){return n.createElement(s.Pill,{testId:"tag-editor-pill",className:p.pill,label:e.label,onClose:function(){e.disabled||e.onRemove(e.index)},onDrag:i,dragHandleComponent:n.createElement(f,null)})})),x=c.SortableContainer((function(e){return n.createElement("div",{className:p.dropContainer},e.children)}));function h(e){var a=t.useState(""),r=a[0],i=a[1],l=e.isDisabled,o=e.items,c=e.constraints,d=e.constraintsType,f=e.hasError,h=t.useCallback((function(t){var n=e.items.filter((function(e,n){return t!==n}));e.onUpdate(n)}),[e]),b=t.useCallback((function(t){var n=u(e.items,t.oldIndex,t.newIndex);e.onUpdate(n)}),[e]);return n.createElement("div",{"data-test-id":"tag-editor-container"},n.createElement(s.TextInput,{testId:"tag-editor-input",className:p.input,disabled:l,error:f,type:"text",value:r,placeholder:"Type the value and hit enter",onKeyDown:function(t){r&&13===t.keyCode&&(e.onUpdate([].concat(e.items,[r])),i(""))},onChange:function(e){i(e.target.value)}}),n.createElement(x,{useDragHandle:!0,axis:"xy",distance:10,onSortEnd:function(e){b({oldIndex:e.oldIndex,newIndex:e.newIndex})}},o.map((function(e,t){return n.createElement(g,{label:e,index:t,key:e+t,disabled:l,onRemove:function(){h(t)}})}))),c&&d&&n.createElement(m,{constraints:c,constraintsType:d}))}function b(e){return null===e||0===e.length}function v(e){var n=e.field,i=(n.validations||[]).filter((function(e){return e.size})).map((function(e){return e.size})),l=i.length>0?i[0]:{},o=function(e){if(e)return a(e.min)&&a(e.max)?"min-max":a(e.min)?"min":a(e.max)?"max":void 0}(l);return t.createElement(r.FieldConnector,{field:n,isInitiallyDisabled:e.isInitiallyDisabled,isEmptyValue:b,throttle:0},(function(e){var n=e.setValue;return t.createElement(h,{constraints:l,constraintsType:o,isDisabled:e.disabled,hasError:e.errors.length>0,items:e.value||[],onUpdate:function(e){n(e)}})}))}v.defaultProps={isInitiallyDisabled:!0},exports.TagsEditor=v;
1
+ "use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var n=require("react"),t=e(n),a=e(require("lodash/isNumber")),r=require("@contentful/field-editor-shared"),i=e(require("lodash/noop")),l=require("emotion"),o=e(require("@contentful/forma-36-tokens")),s=require("@contentful/forma-36-react-components"),c=require("react-sortable-hoc"),u=e(require("array-move")),d={constraints:l.css({fontStyle:"italic",marginTop:o.spacingS,color:o.gray600})};function m(e){var n=e.constraintsType,a=e.constraints;return t.createElement(s.Paragraph,{className:d.constraints,testId:"tag-editor-constraints"},"min"===n&&t.createElement("span",null,"Requires at least ",a.min," ",1===a.min?"tag":"tags"),"max"===n&&t.createElement("span",null,"Requires no more than ",a.max," ",1===a.max?"tag":"tags"),"min-max"===n&&a.max!==a.min&&t.createElement("span",null,"Requires between ",a.min," and ",a.max," tags"),"min-max"===n&&a.max===a.min&&t.createElement("span",null,"Requires exactly ",a.max," ",1===a.max?"tag":"tags"))}var p={dropContainer:l.css({whiteSpace:"nowrap",display:"flex",flexWrap:"wrap"}),input:l.css({marginTop:o.spacingS,marginBottom:o.spacingM}),pill:l.css({marginRight:o.spacingS,marginBottom:o.spacingS}),handle:l.css({lineHeight:"1.5rem",padding:"0.375rem 0.625rem",paddingRight:0,cursor:"grab",userSelect:"none",svg:{fill:o.gray500,verticalAlign:"middle"}})},f=c.SortableHandle((function(){return t.createElement("div",{className:p.handle},t.createElement(s.Icon,{icon:"Drag",color:"muted"}))})),g=c.SortableElement((function(e){return t.createElement(s.Pill,{testId:"tag-editor-pill",className:p.pill,label:e.label,onClose:function(){e.disabled||e.onRemove(e.index)},onDrag:i,dragHandleComponent:t.createElement(f,null)})})),x=c.SortableContainer((function(e){return t.createElement("div",{className:p.dropContainer},e.children)}));function b(e){var a=n.useState(""),r=a[0],i=a[1],l=e.isDisabled,o=e.items,c=e.constraints,d=e.constraintsType,f=e.hasError,b=n.useCallback((function(n){var t=e.items.filter((function(e,t){return n!==t}));e.onUpdate(t)}),[e]),h=n.useCallback((function(n){var t=u(e.items,n.oldIndex,n.newIndex);e.onUpdate(t)}),[e]);return t.createElement("div",{"data-test-id":"tag-editor-container"},t.createElement(s.TextInput,{testId:"tag-editor-input",className:p.input,disabled:l,error:f,type:"text",value:r,placeholder:"Type the value and hit enter",onKeyDown:function(n){r&&13===n.keyCode&&(e.onUpdate([].concat(e.items,[r])),i(""))},onChange:function(e){i(e.target.value)}}),t.createElement(x,{useDragHandle:!0,axis:"xy",distance:10,onSortEnd:function(e){h({oldIndex:e.oldIndex,newIndex:e.newIndex})}},o.map((function(e,n){return t.createElement(g,{label:e,index:n,key:e+n,disabled:l,onRemove:function(){b(n)}})}))),c&&d&&t.createElement(m,{constraints:c,constraintsType:d}))}function h(e){return null===e||0===e.length}function v(e){var t=e.field,i=(t.validations||[]).filter((function(e){return e.size})).map((function(e){return e.size})),l=i.length>0?i[0]:{},o=function(e){if(e)return a(e.min)&&a(e.max)?"min-max":a(e.min)?"min":a(e.max)?"max":void 0}(l);return n.createElement(r.FieldConnector,{field:t,isInitiallyDisabled:e.isInitiallyDisabled,isEmptyValue:h,throttle:0},(function(e){var t=e.setValue;return n.createElement(b,{constraints:l,constraintsType:o,isDisabled:e.disabled,hasError:e.errors.length>0,items:e.value||[],onUpdate:function(e){t(e)}})}))}v.defaultProps={isInitiallyDisabled:!0},exports.TagsEditor=v;
2
2
  //# sourceMappingURL=field-editor-tags.cjs.production.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"field-editor-tags.cjs.production.min.js","sources":["../src/TagsEditorConstraints.tsx","../src/TagsEditor.tsx","../src/TagsEditorContainer.tsx","../src/index.tsx"],"sourcesContent":["import React from 'react';\nimport { css } from 'emotion';\nimport { Paragraph } from '@contentful/forma-36-react-components';\nimport tokens from '@contentful/forma-36-tokens';\nimport { Constraint, ConstraintsType } from './types';\n\nconst styles = {\n constraints: css({\n fontStyle: 'italic',\n marginTop: tokens.spacingS,\n color: tokens.colorTextLight,\n }),\n};\n\ninterface TagEditorConstraintsProps {\n constraintsType: ConstraintsType;\n constraints: Constraint;\n}\n\nexport function TagsEditorConstraints(props: TagEditorConstraintsProps) {\n const { constraintsType, constraints } = props;\n return (\n <Paragraph className={styles.constraints} testId=\"tag-editor-constraints\">\n {constraintsType === 'min' && (\n <span>\n Requires at least {constraints.min} {constraints.min === 1 ? 'tag' : 'tags'}\n </span>\n )}\n {constraintsType === 'max' && (\n <span>\n Requires no more than {constraints.max} {constraints.max === 1 ? 'tag' : 'tags'}\n </span>\n )}\n {constraintsType === 'min-max' && constraints.max !== constraints.min && (\n <span>\n Requires between {constraints.min} and {constraints.max} tags\n </span>\n )}\n {constraintsType === 'min-max' && constraints.max === constraints.min && (\n <span>\n Requires exactly {constraints.max} {constraints.max === 1 ? 'tag' : 'tags'}\n </span>\n )}\n </Paragraph>\n );\n}\n","import noop from 'lodash/noop';\nimport React, { useState, useCallback } from 'react';\nimport { css } from 'emotion';\nimport tokens from '@contentful/forma-36-tokens';\nimport { TextInput, Pill, Icon } from '@contentful/forma-36-react-components';\nimport { TagsEditorConstraints } from './TagsEditorConstraints';\nimport { ConstraintsType, Constraint } from './types';\nimport { SortableContainer, SortableElement, SortableHandle } from 'react-sortable-hoc';\nimport arrayMove from 'array-move';\n\nexport interface TagsEditorProps {\n items: string[];\n isDisabled: boolean;\n hasError: boolean;\n constraintsType?: ConstraintsType;\n constraints?: Constraint;\n onUpdate: (items: string[]) => void;\n}\n\nconst styles = {\n dropContainer: css({\n whiteSpace: 'nowrap',\n display: 'flex',\n flexWrap: 'wrap',\n }),\n input: css({\n marginTop: tokens.spacingS,\n marginBottom: tokens.spacingM,\n }),\n pill: css({\n marginRight: tokens.spacingS,\n marginBottom: tokens.spacingS,\n }),\n handle: css({\n lineHeight: '1.5rem',\n padding: '0.375rem 0.625rem',\n paddingRight: 0,\n cursor: 'grab',\n userSelect: 'none',\n svg: {\n fill: tokens.colorTextLightest,\n verticalAlign: 'middle',\n },\n }),\n};\n\nconst SortablePillHandle = SortableHandle(() => (\n <div className={styles.handle}>\n <Icon icon=\"Drag\" color=\"muted\" />\n </div>\n));\n\ninterface SortablePillProps {\n label: string;\n onRemove: Function;\n disabled: boolean;\n index: number;\n}\n\nconst SortablePill = SortableElement((props: SortablePillProps) => (\n <Pill\n testId=\"tag-editor-pill\"\n className={styles.pill}\n label={props.label}\n onClose={() => {\n if (!props.disabled) {\n props.onRemove(props.index);\n }\n }}\n onDrag={noop}\n dragHandleComponent={<SortablePillHandle />}\n />\n));\n\ninterface SortableListProps {\n children: React.ReactNode;\n}\n\nconst SortableList = SortableContainer((props: SortableListProps) => (\n <div className={styles.dropContainer}>{props.children}</div>\n));\n\nexport function TagsEditor(props: TagsEditorProps) {\n const [pendingValue, setPendingValue] = useState('');\n\n const { isDisabled, items, constraints, constraintsType, hasError } = props;\n\n const removeItem = useCallback(\n (index) => {\n const newItems = props.items.filter((_, filterIndex) => index !== filterIndex);\n props.onUpdate(newItems);\n },\n [props]\n );\n\n const swapItems = useCallback(\n ({ oldIndex, newIndex }) => {\n const newItems = arrayMove(props.items, oldIndex, newIndex);\n props.onUpdate(newItems);\n },\n [props]\n );\n\n return (\n <div data-test-id=\"tag-editor-container\">\n <TextInput\n testId=\"tag-editor-input\"\n className={styles.input}\n disabled={isDisabled}\n error={hasError}\n type=\"text\"\n value={pendingValue}\n placeholder=\"Type the value and hit enter\"\n onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => {\n if (pendingValue && e.keyCode === 13) {\n props.onUpdate([...props.items, pendingValue]);\n setPendingValue('');\n }\n }}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setPendingValue(e.target.value);\n }}\n />\n <SortableList\n useDragHandle\n axis=\"xy\"\n distance={10}\n onSortEnd={({ oldIndex, newIndex }) => {\n swapItems({ oldIndex, newIndex });\n }}>\n {items.map((item, index) => {\n return (\n <SortablePill\n label={item}\n index={index}\n key={item + index}\n disabled={isDisabled}\n onRemove={() => {\n removeItem(index);\n }}\n />\n );\n })}\n </SortableList>\n {constraints && constraintsType && (\n <TagsEditorConstraints constraints={constraints} constraintsType={constraintsType} />\n )}\n </div>\n );\n}\n","import * as React from 'react';\nimport isNumber from 'lodash/isNumber';\nimport { FieldAPI, FieldConnector } from '@contentful/field-editor-shared';\nimport { TagsEditor } from './TagsEditor';\nimport { ConstraintsType, Constraint } from './types';\n\nexport interface TagsEditorContainerProps {\n /**\n * is the field disabled initially\n */\n isInitiallyDisabled: boolean;\n /**\n * sdk.field\n */\n field: FieldAPI;\n}\n\ntype TagEditorValue = string[];\n\nfunction isEmptyTagsValue(value: TagEditorValue | null) {\n return value === null || value.length === 0;\n}\n\nfunction getConstraintsType(sizeConstraints?: Constraint): ConstraintsType | undefined {\n if (!sizeConstraints) {\n return undefined;\n }\n if (isNumber(sizeConstraints.min) && isNumber(sizeConstraints.max)) {\n return 'min-max';\n } else if (isNumber(sizeConstraints.min)) {\n return 'min';\n } else if (isNumber(sizeConstraints.max)) {\n return 'max';\n } else {\n return undefined;\n }\n}\n\nexport function TagsEditorContainer(props: TagsEditorContainerProps) {\n const field = props.field;\n\n const validations = field.validations || [];\n\n const sizeValidations = (validations as { size?: Constraint }[])\n .filter((validation) => validation.size)\n .map((validation) => validation.size);\n\n const constraints = sizeValidations.length > 0 ? sizeValidations[0] : {};\n\n const constraintsType = getConstraintsType(constraints);\n\n return (\n <FieldConnector<TagEditorValue>\n field={field}\n isInitiallyDisabled={props.isInitiallyDisabled}\n isEmptyValue={isEmptyTagsValue}\n throttle={0}>\n {({ disabled, value, errors, setValue }) => {\n const items = value || [];\n return (\n <TagsEditor\n constraints={constraints}\n constraintsType={constraintsType}\n isDisabled={disabled}\n hasError={errors.length > 0}\n items={items}\n onUpdate={(items) => {\n setValue(items);\n }}\n />\n );\n }}\n </FieldConnector>\n );\n}\n\nTagsEditorContainer.defaultProps = {\n isInitiallyDisabled: true,\n};\n","import { TagsEditorContainer } from './TagsEditorContainer';\n\nexport const TagsEditor = TagsEditorContainer;\n"],"names":["styles","constraints","css","fontStyle","marginTop","tokens","spacingS","color","colorTextLight","TagsEditorConstraints","props","constraintsType","React","Paragraph","className","testId","min","max","dropContainer","whiteSpace","display","flexWrap","input","marginBottom","spacingM","pill","marginRight","handle","lineHeight","padding","paddingRight","cursor","userSelect","svg","fill","colorTextLightest","verticalAlign","SortablePillHandle","SortableHandle","Icon","icon","SortablePill","SortableElement","Pill","label","onClose","disabled","onRemove","index","onDrag","noop","dragHandleComponent","SortableList","SortableContainer","children","TagsEditor","useState","pendingValue","setPendingValue","isDisabled","items","hasError","removeItem","useCallback","newItems","filter","_","filterIndex","onUpdate","swapItems","arrayMove","oldIndex","newIndex","TextInput","error","type","value","placeholder","onKeyDown","e","keyCode","onChange","target","useDragHandle","axis","distance","onSortEnd","map","item","key","isEmptyTagsValue","length","TagsEditorContainer","field","sizeValidations","validations","validation","size","sizeConstraints","isNumber","getConstraintsType","FieldConnector","isInitiallyDisabled","isEmptyValue","throttle","setValue","errors","defaultProps"],"mappings":"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"}
1
+ {"version":3,"file":"field-editor-tags.cjs.production.min.js","sources":["../src/TagsEditorConstraints.tsx","../src/TagsEditor.tsx","../src/TagsEditorContainer.tsx","../src/index.tsx"],"sourcesContent":["import React from 'react';\nimport { css } from 'emotion';\nimport { Paragraph } from '@contentful/forma-36-react-components';\nimport tokens from '@contentful/forma-36-tokens';\nimport { Constraint, ConstraintsType } from './types';\n\nconst styles = {\n constraints: css({\n fontStyle: 'italic',\n marginTop: tokens.spacingS,\n color: tokens.gray600,\n }),\n};\n\ninterface TagEditorConstraintsProps {\n constraintsType: ConstraintsType;\n constraints: Constraint;\n}\n\nexport function TagsEditorConstraints(props: TagEditorConstraintsProps) {\n const { constraintsType, constraints } = props;\n return (\n <Paragraph className={styles.constraints} testId=\"tag-editor-constraints\">\n {constraintsType === 'min' && (\n <span>\n Requires at least {constraints.min} {constraints.min === 1 ? 'tag' : 'tags'}\n </span>\n )}\n {constraintsType === 'max' && (\n <span>\n Requires no more than {constraints.max} {constraints.max === 1 ? 'tag' : 'tags'}\n </span>\n )}\n {constraintsType === 'min-max' && constraints.max !== constraints.min && (\n <span>\n Requires between {constraints.min} and {constraints.max} tags\n </span>\n )}\n {constraintsType === 'min-max' && constraints.max === constraints.min && (\n <span>\n Requires exactly {constraints.max} {constraints.max === 1 ? 'tag' : 'tags'}\n </span>\n )}\n </Paragraph>\n );\n}\n","import noop from 'lodash/noop';\nimport React, { useState, useCallback } from 'react';\nimport { css } from 'emotion';\nimport tokens from '@contentful/forma-36-tokens';\nimport { TextInput, Pill, Icon } from '@contentful/forma-36-react-components';\nimport { TagsEditorConstraints } from './TagsEditorConstraints';\nimport { ConstraintsType, Constraint } from './types';\nimport { SortableContainer, SortableElement, SortableHandle } from 'react-sortable-hoc';\nimport arrayMove from 'array-move';\n\nexport interface TagsEditorProps {\n items: string[];\n isDisabled: boolean;\n hasError: boolean;\n constraintsType?: ConstraintsType;\n constraints?: Constraint;\n onUpdate: (items: string[]) => void;\n}\n\nconst styles = {\n dropContainer: css({\n whiteSpace: 'nowrap',\n display: 'flex',\n flexWrap: 'wrap',\n }),\n input: css({\n marginTop: tokens.spacingS,\n marginBottom: tokens.spacingM,\n }),\n pill: css({\n marginRight: tokens.spacingS,\n marginBottom: tokens.spacingS,\n }),\n handle: css({\n lineHeight: '1.5rem',\n padding: '0.375rem 0.625rem',\n paddingRight: 0,\n cursor: 'grab',\n userSelect: 'none',\n svg: {\n fill: tokens.gray500,\n verticalAlign: 'middle',\n },\n }),\n};\n\nconst SortablePillHandle = SortableHandle(() => (\n <div className={styles.handle}>\n <Icon icon=\"Drag\" color=\"muted\" />\n </div>\n));\n\ninterface SortablePillProps {\n label: string;\n onRemove: Function;\n disabled: boolean;\n index: number;\n}\n\nconst SortablePill = SortableElement((props: SortablePillProps) => (\n <Pill\n testId=\"tag-editor-pill\"\n className={styles.pill}\n label={props.label}\n onClose={() => {\n if (!props.disabled) {\n props.onRemove(props.index);\n }\n }}\n onDrag={noop}\n dragHandleComponent={<SortablePillHandle />}\n />\n));\n\ninterface SortableListProps {\n children: React.ReactNode;\n}\n\nconst SortableList = SortableContainer((props: SortableListProps) => (\n <div className={styles.dropContainer}>{props.children}</div>\n));\n\nexport function TagsEditor(props: TagsEditorProps) {\n const [pendingValue, setPendingValue] = useState('');\n\n const { isDisabled, items, constraints, constraintsType, hasError } = props;\n\n const removeItem = useCallback(\n (index) => {\n const newItems = props.items.filter((_, filterIndex) => index !== filterIndex);\n props.onUpdate(newItems);\n },\n [props]\n );\n\n const swapItems = useCallback(\n ({ oldIndex, newIndex }) => {\n const newItems = arrayMove(props.items, oldIndex, newIndex);\n props.onUpdate(newItems);\n },\n [props]\n );\n\n return (\n <div data-test-id=\"tag-editor-container\">\n <TextInput\n testId=\"tag-editor-input\"\n className={styles.input}\n disabled={isDisabled}\n error={hasError}\n type=\"text\"\n value={pendingValue}\n placeholder=\"Type the value and hit enter\"\n onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => {\n if (pendingValue && e.keyCode === 13) {\n props.onUpdate([...props.items, pendingValue]);\n setPendingValue('');\n }\n }}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setPendingValue(e.target.value);\n }}\n />\n <SortableList\n useDragHandle\n axis=\"xy\"\n distance={10}\n onSortEnd={({ oldIndex, newIndex }) => {\n swapItems({ oldIndex, newIndex });\n }}>\n {items.map((item, index) => {\n return (\n <SortablePill\n label={item}\n index={index}\n key={item + index}\n disabled={isDisabled}\n onRemove={() => {\n removeItem(index);\n }}\n />\n );\n })}\n </SortableList>\n {constraints && constraintsType && (\n <TagsEditorConstraints constraints={constraints} constraintsType={constraintsType} />\n )}\n </div>\n );\n}\n","import * as React from 'react';\nimport isNumber from 'lodash/isNumber';\nimport { FieldAPI, FieldConnector } from '@contentful/field-editor-shared';\nimport { TagsEditor } from './TagsEditor';\nimport { ConstraintsType, Constraint } from './types';\n\nexport interface TagsEditorContainerProps {\n /**\n * is the field disabled initially\n */\n isInitiallyDisabled: boolean;\n /**\n * sdk.field\n */\n field: FieldAPI;\n}\n\ntype TagEditorValue = string[];\n\nfunction isEmptyTagsValue(value: TagEditorValue | null) {\n return value === null || value.length === 0;\n}\n\nfunction getConstraintsType(sizeConstraints?: Constraint): ConstraintsType | undefined {\n if (!sizeConstraints) {\n return undefined;\n }\n if (isNumber(sizeConstraints.min) && isNumber(sizeConstraints.max)) {\n return 'min-max';\n } else if (isNumber(sizeConstraints.min)) {\n return 'min';\n } else if (isNumber(sizeConstraints.max)) {\n return 'max';\n } else {\n return undefined;\n }\n}\n\nexport function TagsEditorContainer(props: TagsEditorContainerProps) {\n const field = props.field;\n\n const validations = field.validations || [];\n\n const sizeValidations = (validations as { size?: Constraint }[])\n .filter((validation) => validation.size)\n .map((validation) => validation.size);\n\n const constraints = sizeValidations.length > 0 ? sizeValidations[0] : {};\n\n const constraintsType = getConstraintsType(constraints);\n\n return (\n <FieldConnector<TagEditorValue>\n field={field}\n isInitiallyDisabled={props.isInitiallyDisabled}\n isEmptyValue={isEmptyTagsValue}\n throttle={0}>\n {({ disabled, value, errors, setValue }) => {\n const items = value || [];\n return (\n <TagsEditor\n constraints={constraints}\n constraintsType={constraintsType}\n isDisabled={disabled}\n hasError={errors.length > 0}\n items={items}\n onUpdate={(items) => {\n setValue(items);\n }}\n />\n );\n }}\n </FieldConnector>\n );\n}\n\nTagsEditorContainer.defaultProps = {\n isInitiallyDisabled: true,\n};\n","import { TagsEditorContainer } from './TagsEditorContainer';\n\nexport const TagsEditor = TagsEditorContainer;\n"],"names":["styles","constraints","css","fontStyle","marginTop","tokens","spacingS","color","gray600","TagsEditorConstraints","props","constraintsType","React","Paragraph","className","testId","min","max","dropContainer","whiteSpace","display","flexWrap","input","marginBottom","spacingM","pill","marginRight","handle","lineHeight","padding","paddingRight","cursor","userSelect","svg","fill","gray500","verticalAlign","SortablePillHandle","SortableHandle","Icon","icon","SortablePill","SortableElement","Pill","label","onClose","disabled","onRemove","index","onDrag","noop","dragHandleComponent","SortableList","SortableContainer","children","TagsEditor","useState","pendingValue","setPendingValue","isDisabled","items","hasError","removeItem","useCallback","newItems","filter","_","filterIndex","onUpdate","swapItems","arrayMove","oldIndex","newIndex","TextInput","error","type","value","placeholder","onKeyDown","e","keyCode","onChange","target","useDragHandle","axis","distance","onSortEnd","map","item","key","isEmptyTagsValue","length","TagsEditorContainer","field","sizeValidations","validations","validation","size","sizeConstraints","isNumber","getConstraintsType","FieldConnector","isInitiallyDisabled","isEmptyValue","throttle","setValue","errors","defaultProps"],"mappings":"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"}
@@ -12,7 +12,7 @@ var styles = {
12
12
  constraints: /*#__PURE__*/css({
13
13
  fontStyle: 'italic',
14
14
  marginTop: tokens.spacingS,
15
- color: tokens.colorTextLight
15
+ color: tokens.gray600
16
16
  })
17
17
  };
18
18
  function TagsEditorConstraints(props) {
@@ -45,7 +45,7 @@ var styles$1 = {
45
45
  cursor: 'grab',
46
46
  userSelect: 'none',
47
47
  svg: {
48
- fill: tokens.colorTextLightest,
48
+ fill: tokens.gray500,
49
49
  verticalAlign: 'middle'
50
50
  }
51
51
  })
@@ -1 +1 @@
1
- {"version":3,"file":"field-editor-tags.esm.js","sources":["../src/TagsEditorConstraints.tsx","../src/TagsEditor.tsx","../src/TagsEditorContainer.tsx","../src/index.tsx"],"sourcesContent":["import React from 'react';\nimport { css } from 'emotion';\nimport { Paragraph } from '@contentful/forma-36-react-components';\nimport tokens from '@contentful/forma-36-tokens';\nimport { Constraint, ConstraintsType } from './types';\n\nconst styles = {\n constraints: css({\n fontStyle: 'italic',\n marginTop: tokens.spacingS,\n color: tokens.colorTextLight,\n }),\n};\n\ninterface TagEditorConstraintsProps {\n constraintsType: ConstraintsType;\n constraints: Constraint;\n}\n\nexport function TagsEditorConstraints(props: TagEditorConstraintsProps) {\n const { constraintsType, constraints } = props;\n return (\n <Paragraph className={styles.constraints} testId=\"tag-editor-constraints\">\n {constraintsType === 'min' && (\n <span>\n Requires at least {constraints.min} {constraints.min === 1 ? 'tag' : 'tags'}\n </span>\n )}\n {constraintsType === 'max' && (\n <span>\n Requires no more than {constraints.max} {constraints.max === 1 ? 'tag' : 'tags'}\n </span>\n )}\n {constraintsType === 'min-max' && constraints.max !== constraints.min && (\n <span>\n Requires between {constraints.min} and {constraints.max} tags\n </span>\n )}\n {constraintsType === 'min-max' && constraints.max === constraints.min && (\n <span>\n Requires exactly {constraints.max} {constraints.max === 1 ? 'tag' : 'tags'}\n </span>\n )}\n </Paragraph>\n );\n}\n","import noop from 'lodash/noop';\nimport React, { useState, useCallback } from 'react';\nimport { css } from 'emotion';\nimport tokens from '@contentful/forma-36-tokens';\nimport { TextInput, Pill, Icon } from '@contentful/forma-36-react-components';\nimport { TagsEditorConstraints } from './TagsEditorConstraints';\nimport { ConstraintsType, Constraint } from './types';\nimport { SortableContainer, SortableElement, SortableHandle } from 'react-sortable-hoc';\nimport arrayMove from 'array-move';\n\nexport interface TagsEditorProps {\n items: string[];\n isDisabled: boolean;\n hasError: boolean;\n constraintsType?: ConstraintsType;\n constraints?: Constraint;\n onUpdate: (items: string[]) => void;\n}\n\nconst styles = {\n dropContainer: css({\n whiteSpace: 'nowrap',\n display: 'flex',\n flexWrap: 'wrap',\n }),\n input: css({\n marginTop: tokens.spacingS,\n marginBottom: tokens.spacingM,\n }),\n pill: css({\n marginRight: tokens.spacingS,\n marginBottom: tokens.spacingS,\n }),\n handle: css({\n lineHeight: '1.5rem',\n padding: '0.375rem 0.625rem',\n paddingRight: 0,\n cursor: 'grab',\n userSelect: 'none',\n svg: {\n fill: tokens.colorTextLightest,\n verticalAlign: 'middle',\n },\n }),\n};\n\nconst SortablePillHandle = SortableHandle(() => (\n <div className={styles.handle}>\n <Icon icon=\"Drag\" color=\"muted\" />\n </div>\n));\n\ninterface SortablePillProps {\n label: string;\n onRemove: Function;\n disabled: boolean;\n index: number;\n}\n\nconst SortablePill = SortableElement((props: SortablePillProps) => (\n <Pill\n testId=\"tag-editor-pill\"\n className={styles.pill}\n label={props.label}\n onClose={() => {\n if (!props.disabled) {\n props.onRemove(props.index);\n }\n }}\n onDrag={noop}\n dragHandleComponent={<SortablePillHandle />}\n />\n));\n\ninterface SortableListProps {\n children: React.ReactNode;\n}\n\nconst SortableList = SortableContainer((props: SortableListProps) => (\n <div className={styles.dropContainer}>{props.children}</div>\n));\n\nexport function TagsEditor(props: TagsEditorProps) {\n const [pendingValue, setPendingValue] = useState('');\n\n const { isDisabled, items, constraints, constraintsType, hasError } = props;\n\n const removeItem = useCallback(\n (index) => {\n const newItems = props.items.filter((_, filterIndex) => index !== filterIndex);\n props.onUpdate(newItems);\n },\n [props]\n );\n\n const swapItems = useCallback(\n ({ oldIndex, newIndex }) => {\n const newItems = arrayMove(props.items, oldIndex, newIndex);\n props.onUpdate(newItems);\n },\n [props]\n );\n\n return (\n <div data-test-id=\"tag-editor-container\">\n <TextInput\n testId=\"tag-editor-input\"\n className={styles.input}\n disabled={isDisabled}\n error={hasError}\n type=\"text\"\n value={pendingValue}\n placeholder=\"Type the value and hit enter\"\n onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => {\n if (pendingValue && e.keyCode === 13) {\n props.onUpdate([...props.items, pendingValue]);\n setPendingValue('');\n }\n }}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setPendingValue(e.target.value);\n }}\n />\n <SortableList\n useDragHandle\n axis=\"xy\"\n distance={10}\n onSortEnd={({ oldIndex, newIndex }) => {\n swapItems({ oldIndex, newIndex });\n }}>\n {items.map((item, index) => {\n return (\n <SortablePill\n label={item}\n index={index}\n key={item + index}\n disabled={isDisabled}\n onRemove={() => {\n removeItem(index);\n }}\n />\n );\n })}\n </SortableList>\n {constraints && constraintsType && (\n <TagsEditorConstraints constraints={constraints} constraintsType={constraintsType} />\n )}\n </div>\n );\n}\n","import * as React from 'react';\nimport isNumber from 'lodash/isNumber';\nimport { FieldAPI, FieldConnector } from '@contentful/field-editor-shared';\nimport { TagsEditor } from './TagsEditor';\nimport { ConstraintsType, Constraint } from './types';\n\nexport interface TagsEditorContainerProps {\n /**\n * is the field disabled initially\n */\n isInitiallyDisabled: boolean;\n /**\n * sdk.field\n */\n field: FieldAPI;\n}\n\ntype TagEditorValue = string[];\n\nfunction isEmptyTagsValue(value: TagEditorValue | null) {\n return value === null || value.length === 0;\n}\n\nfunction getConstraintsType(sizeConstraints?: Constraint): ConstraintsType | undefined {\n if (!sizeConstraints) {\n return undefined;\n }\n if (isNumber(sizeConstraints.min) && isNumber(sizeConstraints.max)) {\n return 'min-max';\n } else if (isNumber(sizeConstraints.min)) {\n return 'min';\n } else if (isNumber(sizeConstraints.max)) {\n return 'max';\n } else {\n return undefined;\n }\n}\n\nexport function TagsEditorContainer(props: TagsEditorContainerProps) {\n const field = props.field;\n\n const validations = field.validations || [];\n\n const sizeValidations = (validations as { size?: Constraint }[])\n .filter((validation) => validation.size)\n .map((validation) => validation.size);\n\n const constraints = sizeValidations.length > 0 ? sizeValidations[0] : {};\n\n const constraintsType = getConstraintsType(constraints);\n\n return (\n <FieldConnector<TagEditorValue>\n field={field}\n isInitiallyDisabled={props.isInitiallyDisabled}\n isEmptyValue={isEmptyTagsValue}\n throttle={0}>\n {({ disabled, value, errors, setValue }) => {\n const items = value || [];\n return (\n <TagsEditor\n constraints={constraints}\n constraintsType={constraintsType}\n isDisabled={disabled}\n hasError={errors.length > 0}\n items={items}\n onUpdate={(items) => {\n setValue(items);\n }}\n />\n );\n }}\n </FieldConnector>\n );\n}\n\nTagsEditorContainer.defaultProps = {\n isInitiallyDisabled: true,\n};\n","import { TagsEditorContainer } from './TagsEditorContainer';\n\nexport const TagsEditor = TagsEditorContainer;\n"],"names":["styles","constraints","css","fontStyle","marginTop","tokens","spacingS","color","colorTextLight","TagsEditorConstraints","props","constraintsType","React","Paragraph","className","testId","min","max","dropContainer","whiteSpace","display","flexWrap","input","marginBottom","spacingM","pill","marginRight","handle","lineHeight","padding","paddingRight","cursor","userSelect","svg","fill","colorTextLightest","verticalAlign","SortablePillHandle","SortableHandle","Icon","icon","SortablePill","SortableElement","Pill","label","onClose","disabled","onRemove","index","onDrag","noop","dragHandleComponent","SortableList","SortableContainer","children","TagsEditor","useState","pendingValue","setPendingValue","isDisabled","items","hasError","removeItem","useCallback","newItems","filter","_","filterIndex","onUpdate","swapItems","oldIndex","newIndex","arrayMove","TextInput","error","type","value","placeholder","onKeyDown","e","keyCode","onChange","target","useDragHandle","axis","distance","onSortEnd","map","item","key","isEmptyTagsValue","length","getConstraintsType","sizeConstraints","undefined","isNumber","TagsEditorContainer","field","validations","sizeValidations","validation","size","FieldConnector","isInitiallyDisabled","isEmptyValue","throttle","errors","setValue","defaultProps"],"mappings":";;;;;;;;;;AAMA,IAAMA,MAAM,GAAG;AACbC,EAAAA,WAAW,eAAEC,GAAG,CAAC;AACfC,IAAAA,SAAS,EAAE,QADI;AAEfC,IAAAA,SAAS,EAAEC,MAAM,CAACC,QAFH;AAGfC,IAAAA,KAAK,EAAEF,MAAM,CAACG;AAHC,GAAD;AADH,CAAf;SAagBC,sBAAsBC;MAC5BC,kBAAiCD,MAAjCC;MAAiBV,cAAgBS,MAAhBT;AACzB,SACEW,4BAAA,CAACC,SAAD;AAAWC,IAAAA,SAAS,EAAEd,MAAM,CAACC;AAAac,IAAAA,MAAM,EAAC;GAAjD,EACGJ,eAAe,KAAK,KAApB,IACCC,4BAAA,OAAA,MAAA,sBAAA,EACqBX,WAAW,CAACe,GADjC,KAAA,EACuCf,WAAW,CAACe,GAAZ,KAAoB,CAApB,GAAwB,KAAxB,GAAgC,MADvE,CAFJ,EAMGL,eAAe,KAAK,KAApB,IACCC,4BAAA,OAAA,MAAA,0BAAA,EACyBX,WAAW,CAACgB,GADrC,KAAA,EAC2ChB,WAAW,CAACgB,GAAZ,KAAoB,CAApB,GAAwB,KAAxB,GAAgC,MAD3E,CAPJ,EAWGN,eAAe,KAAK,SAApB,IAAiCV,WAAW,CAACgB,GAAZ,KAAoBhB,WAAW,CAACe,GAAjE,IACCJ,4BAAA,OAAA,MAAA,qBAAA,EACoBX,WAAW,CAACe,GADhC,SAAA,EAC0Cf,WAAW,CAACgB,GADtD,SAAA,CAZJ,EAgBGN,eAAe,KAAK,SAApB,IAAiCV,WAAW,CAACgB,GAAZ,KAAoBhB,WAAW,CAACe,GAAjE,IACCJ,4BAAA,OAAA,MAAA,qBAAA,EACoBX,WAAW,CAACgB,GADhC,KAAA,EACsChB,WAAW,CAACgB,GAAZ,KAAoB,CAApB,GAAwB,KAAxB,GAAgC,MADtE,CAjBJ,CADF;AAwBD;;AC1BD,IAAMjB,QAAM,GAAG;AACbkB,EAAAA,aAAa,eAAEhB,GAAG,CAAC;AACjBiB,IAAAA,UAAU,EAAE,QADK;AAEjBC,IAAAA,OAAO,EAAE,MAFQ;AAGjBC,IAAAA,QAAQ,EAAE;AAHO,GAAD,CADL;AAMbC,EAAAA,KAAK,eAAEpB,GAAG,CAAC;AACTE,IAAAA,SAAS,EAAEC,MAAM,CAACC,QADT;AAETiB,IAAAA,YAAY,EAAElB,MAAM,CAACmB;AAFZ,GAAD,CANG;AAUbC,EAAAA,IAAI,eAAEvB,GAAG,CAAC;AACRwB,IAAAA,WAAW,EAAErB,MAAM,CAACC,QADZ;AAERiB,IAAAA,YAAY,EAAElB,MAAM,CAACC;AAFb,GAAD,CAVI;AAcbqB,EAAAA,MAAM,eAAEzB,GAAG,CAAC;AACV0B,IAAAA,UAAU,EAAE,QADF;AAEVC,IAAAA,OAAO,EAAE,mBAFC;AAGVC,IAAAA,YAAY,EAAE,CAHJ;AAIVC,IAAAA,MAAM,EAAE,MAJE;AAKVC,IAAAA,UAAU,EAAE,MALF;AAMVC,IAAAA,GAAG,EAAE;AACHC,MAAAA,IAAI,EAAE7B,MAAM,CAAC8B,iBADV;AAEHC,MAAAA,aAAa,EAAE;AAFZ;AANK,GAAD;AAdE,CAAf;AA2BA,IAAMC,kBAAkB,gBAAGC,cAAc,CAAC;AAAA,SACxC1B,4BAAA,MAAA;AAAKE,IAAAA,SAAS,EAAEd,QAAM,CAAC2B;GAAvB,EACEf,4BAAA,CAAC2B,IAAD;AAAMC,IAAAA,IAAI,EAAC;AAAOjC,IAAAA,KAAK,EAAC;GAAxB,CADF,CADwC;AAAA,CAAD,CAAzC;AAaA,IAAMkC,YAAY,gBAAGC,eAAe,CAAC,UAAChC,KAAD;AAAA,SACnCE,4BAAA,CAAC+B,IAAD;AACE5B,IAAAA,MAAM,EAAC;AACPD,IAAAA,SAAS,EAAEd,QAAM,CAACyB;AAClBmB,IAAAA,KAAK,EAAElC,KAAK,CAACkC;AACbC,IAAAA,OAAO,EAAE;AACP,UAAI,CAACnC,KAAK,CAACoC,QAAX,EAAqB;AACnBpC,QAAAA,KAAK,CAACqC,QAAN,CAAerC,KAAK,CAACsC,KAArB;AACD;AACF;AACDC,IAAAA,MAAM,EAAEC;AACRC,IAAAA,mBAAmB,EAAEvC,4BAAA,CAACyB,kBAAD,MAAA;GAVvB,CADmC;AAAA,CAAD,CAApC;AAmBA,IAAMe,YAAY,gBAAGC,iBAAiB,CAAC,UAAC3C,KAAD;AAAA,SACrCE,4BAAA,MAAA;AAAKE,IAAAA,SAAS,EAAEd,QAAM,CAACkB;GAAvB,EAAuCR,KAAK,CAAC4C,QAA7C,CADqC;AAAA,CAAD,CAAtC;AAIA,SAAgBC,WAAW7C;kBACe8C,QAAQ,CAAC,EAAD;MAAzCC;MAAcC;;MAEbC,aAA8DjD,MAA9DiD;MAAYC,QAAkDlD,MAAlDkD;MAAO3D,cAA2CS,MAA3CT;MAAaU,kBAA8BD,MAA9BC;MAAiBkD,WAAanD,MAAbmD;AAEzD,MAAMC,UAAU,GAAGC,WAAW,CAC5B,UAACf,KAAD;AACE,QAAMgB,QAAQ,GAAGtD,KAAK,CAACkD,KAAN,CAAYK,MAAZ,CAAmB,UAACC,CAAD,EAAIC,WAAJ;AAAA,aAAoBnB,KAAK,KAAKmB,WAA9B;AAAA,KAAnB,CAAjB;AACAzD,IAAAA,KAAK,CAAC0D,QAAN,CAAeJ,QAAf;AACD,GAJ2B,EAK5B,CAACtD,KAAD,CAL4B,CAA9B;AAQA,MAAM2D,SAAS,GAAGN,WAAW,CAC3B;QAAGO,gBAAAA;QAAUC,gBAAAA;AACX,QAAMP,QAAQ,GAAGQ,SAAS,CAAC9D,KAAK,CAACkD,KAAP,EAAcU,QAAd,EAAwBC,QAAxB,CAA1B;AACA7D,IAAAA,KAAK,CAAC0D,QAAN,CAAeJ,QAAf;AACD,GAJ0B,EAK3B,CAACtD,KAAD,CAL2B,CAA7B;AAQA,SACEE,4BAAA,MAAA;oBAAkB;GAAlB,EACEA,4BAAA,CAAC6D,SAAD;AACE1D,IAAAA,MAAM,EAAC;AACPD,IAAAA,SAAS,EAAEd,QAAM,CAACsB;AAClBwB,IAAAA,QAAQ,EAAEa;AACVe,IAAAA,KAAK,EAAEb;AACPc,IAAAA,IAAI,EAAC;AACLC,IAAAA,KAAK,EAAEnB;AACPoB,IAAAA,WAAW,EAAC;AACZC,IAAAA,SAAS,EAAE,mBAACC,CAAD;AACT,UAAItB,YAAY,IAAIsB,CAAC,CAACC,OAAF,KAAc,EAAlC,EAAsC;AACpCtE,QAAAA,KAAK,CAAC0D,QAAN,WAAmB1D,KAAK,CAACkD,KAAzB,GAAgCH,YAAhC;AACAC,QAAAA,eAAe,CAAC,EAAD,CAAf;AACD;AACF;AACDuB,IAAAA,QAAQ,EAAE,kBAACF,CAAD;AACRrB,MAAAA,eAAe,CAACqB,CAAC,CAACG,MAAF,CAASN,KAAV,CAAf;AACD;GAhBH,CADF,EAmBEhE,4BAAA,CAACwC,YAAD;AACE+B,IAAAA,aAAa;AACbC,IAAAA,IAAI,EAAC;AACLC,IAAAA,QAAQ,EAAE;AACVC,IAAAA,SAAS,EAAE;UAAGhB,iBAAAA;UAAUC,iBAAAA;AACtBF,MAAAA,SAAS,CAAC;AAAEC,QAAAA,QAAQ,EAARA,QAAF;AAAYC,QAAAA,QAAQ,EAARA;AAAZ,OAAD,CAAT;AACD;GANH,EAOGX,KAAK,CAAC2B,GAAN,CAAU,UAACC,IAAD,EAAOxC,KAAP;AACT,WACEpC,4BAAA,CAAC6B,YAAD;AACEG,MAAAA,KAAK,EAAE4C;AACPxC,MAAAA,KAAK,EAAEA;AACPyC,MAAAA,GAAG,EAAED,IAAI,GAAGxC;AACZF,MAAAA,QAAQ,EAAEa;AACVZ,MAAAA,QAAQ,EAAE;AACRe,QAAAA,UAAU,CAACd,KAAD,CAAV;AACD;KAPH,CADF;AAWD,GAZA,CAPH,CAnBF,EAwCG/C,WAAW,IAAIU,eAAf,IACCC,4BAAA,CAACH,qBAAD;AAAuBR,IAAAA,WAAW,EAAEA;AAAaU,IAAAA,eAAe,EAAEA;GAAlE,CAzCJ,CADF;AA8CD;;AClID,SAAS+E,gBAAT,CAA0Bd,KAA1B;AACE,SAAOA,KAAK,KAAK,IAAV,IAAkBA,KAAK,CAACe,MAAN,KAAiB,CAA1C;AACD;;AAED,SAASC,kBAAT,CAA4BC,eAA5B;AACE,MAAI,CAACA,eAAL,EAAsB;AACpB,WAAOC,SAAP;AACD;;AACD,MAAIC,QAAQ,CAACF,eAAe,CAAC7E,GAAjB,CAAR,IAAiC+E,QAAQ,CAACF,eAAe,CAAC5E,GAAjB,CAA7C,EAAoE;AAClE,WAAO,SAAP;AACD,GAFD,MAEO,IAAI8E,QAAQ,CAACF,eAAe,CAAC7E,GAAjB,CAAZ,EAAmC;AACxC,WAAO,KAAP;AACD,GAFM,MAEA,IAAI+E,QAAQ,CAACF,eAAe,CAAC5E,GAAjB,CAAZ,EAAmC;AACxC,WAAO,KAAP;AACD,GAFM,MAEA;AACL,WAAO6E,SAAP;AACD;AACF;;AAED,SAAgBE,oBAAoBtF;AAClC,MAAMuF,KAAK,GAAGvF,KAAK,CAACuF,KAApB;AAEA,MAAMC,WAAW,GAAGD,KAAK,CAACC,WAAN,IAAqB,EAAzC;AAEA,MAAMC,eAAe,GAAID,WAAuC,CAC7DjC,MADsB,CACf,UAACmC,UAAD;AAAA,WAAgBA,UAAU,CAACC,IAA3B;AAAA,GADe,EAEtBd,GAFsB,CAElB,UAACa,UAAD;AAAA,WAAgBA,UAAU,CAACC,IAA3B;AAAA,GAFkB,CAAzB;AAIA,MAAMpG,WAAW,GAAGkG,eAAe,CAACR,MAAhB,GAAyB,CAAzB,GAA6BQ,eAAe,CAAC,CAAD,CAA5C,GAAkD,EAAtE;AAEA,MAAMxF,eAAe,GAAGiF,kBAAkB,CAAC3F,WAAD,CAA1C;AAEA,SACEW,aAAA,CAAC0F,cAAD;AACEL,IAAAA,KAAK,EAAEA;AACPM,IAAAA,mBAAmB,EAAE7F,KAAK,CAAC6F;AAC3BC,IAAAA,YAAY,EAAEd;AACde,IAAAA,QAAQ,EAAE;GAJZ,EAKG;QAAG3D,gBAAAA;QAAU8B,aAAAA;QAAO8B,cAAAA;QAAQC,gBAAAA;AAC3B,QAAM/C,KAAK,GAAGgB,KAAK,IAAI,EAAvB;AACA,WACEhE,aAAA,CAAC2C,UAAD;AACEtD,MAAAA,WAAW,EAAEA;AACbU,MAAAA,eAAe,EAAEA;AACjBgD,MAAAA,UAAU,EAAEb;AACZe,MAAAA,QAAQ,EAAE6C,MAAM,CAACf,MAAP,GAAgB;AAC1B/B,MAAAA,KAAK,EAAEA;AACPQ,MAAAA,QAAQ,EAAE,kBAACR,KAAD;AACR+C,QAAAA,QAAQ,CAAC/C,KAAD,CAAR;AACD;KARH,CADF;AAYD,GAnBH,CADF;AAuBD;AAEDoC,mBAAmB,CAACY,YAApB,GAAmC;AACjCL,EAAAA,mBAAmB,EAAE;AADY,CAAnC;;IC1EahD,YAAU,GAAGyC,mBAAnB;;;;"}
1
+ {"version":3,"file":"field-editor-tags.esm.js","sources":["../src/TagsEditorConstraints.tsx","../src/TagsEditor.tsx","../src/TagsEditorContainer.tsx","../src/index.tsx"],"sourcesContent":["import React from 'react';\nimport { css } from 'emotion';\nimport { Paragraph } from '@contentful/forma-36-react-components';\nimport tokens from '@contentful/forma-36-tokens';\nimport { Constraint, ConstraintsType } from './types';\n\nconst styles = {\n constraints: css({\n fontStyle: 'italic',\n marginTop: tokens.spacingS,\n color: tokens.gray600,\n }),\n};\n\ninterface TagEditorConstraintsProps {\n constraintsType: ConstraintsType;\n constraints: Constraint;\n}\n\nexport function TagsEditorConstraints(props: TagEditorConstraintsProps) {\n const { constraintsType, constraints } = props;\n return (\n <Paragraph className={styles.constraints} testId=\"tag-editor-constraints\">\n {constraintsType === 'min' && (\n <span>\n Requires at least {constraints.min} {constraints.min === 1 ? 'tag' : 'tags'}\n </span>\n )}\n {constraintsType === 'max' && (\n <span>\n Requires no more than {constraints.max} {constraints.max === 1 ? 'tag' : 'tags'}\n </span>\n )}\n {constraintsType === 'min-max' && constraints.max !== constraints.min && (\n <span>\n Requires between {constraints.min} and {constraints.max} tags\n </span>\n )}\n {constraintsType === 'min-max' && constraints.max === constraints.min && (\n <span>\n Requires exactly {constraints.max} {constraints.max === 1 ? 'tag' : 'tags'}\n </span>\n )}\n </Paragraph>\n );\n}\n","import noop from 'lodash/noop';\nimport React, { useState, useCallback } from 'react';\nimport { css } from 'emotion';\nimport tokens from '@contentful/forma-36-tokens';\nimport { TextInput, Pill, Icon } from '@contentful/forma-36-react-components';\nimport { TagsEditorConstraints } from './TagsEditorConstraints';\nimport { ConstraintsType, Constraint } from './types';\nimport { SortableContainer, SortableElement, SortableHandle } from 'react-sortable-hoc';\nimport arrayMove from 'array-move';\n\nexport interface TagsEditorProps {\n items: string[];\n isDisabled: boolean;\n hasError: boolean;\n constraintsType?: ConstraintsType;\n constraints?: Constraint;\n onUpdate: (items: string[]) => void;\n}\n\nconst styles = {\n dropContainer: css({\n whiteSpace: 'nowrap',\n display: 'flex',\n flexWrap: 'wrap',\n }),\n input: css({\n marginTop: tokens.spacingS,\n marginBottom: tokens.spacingM,\n }),\n pill: css({\n marginRight: tokens.spacingS,\n marginBottom: tokens.spacingS,\n }),\n handle: css({\n lineHeight: '1.5rem',\n padding: '0.375rem 0.625rem',\n paddingRight: 0,\n cursor: 'grab',\n userSelect: 'none',\n svg: {\n fill: tokens.gray500,\n verticalAlign: 'middle',\n },\n }),\n};\n\nconst SortablePillHandle = SortableHandle(() => (\n <div className={styles.handle}>\n <Icon icon=\"Drag\" color=\"muted\" />\n </div>\n));\n\ninterface SortablePillProps {\n label: string;\n onRemove: Function;\n disabled: boolean;\n index: number;\n}\n\nconst SortablePill = SortableElement((props: SortablePillProps) => (\n <Pill\n testId=\"tag-editor-pill\"\n className={styles.pill}\n label={props.label}\n onClose={() => {\n if (!props.disabled) {\n props.onRemove(props.index);\n }\n }}\n onDrag={noop}\n dragHandleComponent={<SortablePillHandle />}\n />\n));\n\ninterface SortableListProps {\n children: React.ReactNode;\n}\n\nconst SortableList = SortableContainer((props: SortableListProps) => (\n <div className={styles.dropContainer}>{props.children}</div>\n));\n\nexport function TagsEditor(props: TagsEditorProps) {\n const [pendingValue, setPendingValue] = useState('');\n\n const { isDisabled, items, constraints, constraintsType, hasError } = props;\n\n const removeItem = useCallback(\n (index) => {\n const newItems = props.items.filter((_, filterIndex) => index !== filterIndex);\n props.onUpdate(newItems);\n },\n [props]\n );\n\n const swapItems = useCallback(\n ({ oldIndex, newIndex }) => {\n const newItems = arrayMove(props.items, oldIndex, newIndex);\n props.onUpdate(newItems);\n },\n [props]\n );\n\n return (\n <div data-test-id=\"tag-editor-container\">\n <TextInput\n testId=\"tag-editor-input\"\n className={styles.input}\n disabled={isDisabled}\n error={hasError}\n type=\"text\"\n value={pendingValue}\n placeholder=\"Type the value and hit enter\"\n onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => {\n if (pendingValue && e.keyCode === 13) {\n props.onUpdate([...props.items, pendingValue]);\n setPendingValue('');\n }\n }}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setPendingValue(e.target.value);\n }}\n />\n <SortableList\n useDragHandle\n axis=\"xy\"\n distance={10}\n onSortEnd={({ oldIndex, newIndex }) => {\n swapItems({ oldIndex, newIndex });\n }}>\n {items.map((item, index) => {\n return (\n <SortablePill\n label={item}\n index={index}\n key={item + index}\n disabled={isDisabled}\n onRemove={() => {\n removeItem(index);\n }}\n />\n );\n })}\n </SortableList>\n {constraints && constraintsType && (\n <TagsEditorConstraints constraints={constraints} constraintsType={constraintsType} />\n )}\n </div>\n );\n}\n","import * as React from 'react';\nimport isNumber from 'lodash/isNumber';\nimport { FieldAPI, FieldConnector } from '@contentful/field-editor-shared';\nimport { TagsEditor } from './TagsEditor';\nimport { ConstraintsType, Constraint } from './types';\n\nexport interface TagsEditorContainerProps {\n /**\n * is the field disabled initially\n */\n isInitiallyDisabled: boolean;\n /**\n * sdk.field\n */\n field: FieldAPI;\n}\n\ntype TagEditorValue = string[];\n\nfunction isEmptyTagsValue(value: TagEditorValue | null) {\n return value === null || value.length === 0;\n}\n\nfunction getConstraintsType(sizeConstraints?: Constraint): ConstraintsType | undefined {\n if (!sizeConstraints) {\n return undefined;\n }\n if (isNumber(sizeConstraints.min) && isNumber(sizeConstraints.max)) {\n return 'min-max';\n } else if (isNumber(sizeConstraints.min)) {\n return 'min';\n } else if (isNumber(sizeConstraints.max)) {\n return 'max';\n } else {\n return undefined;\n }\n}\n\nexport function TagsEditorContainer(props: TagsEditorContainerProps) {\n const field = props.field;\n\n const validations = field.validations || [];\n\n const sizeValidations = (validations as { size?: Constraint }[])\n .filter((validation) => validation.size)\n .map((validation) => validation.size);\n\n const constraints = sizeValidations.length > 0 ? sizeValidations[0] : {};\n\n const constraintsType = getConstraintsType(constraints);\n\n return (\n <FieldConnector<TagEditorValue>\n field={field}\n isInitiallyDisabled={props.isInitiallyDisabled}\n isEmptyValue={isEmptyTagsValue}\n throttle={0}>\n {({ disabled, value, errors, setValue }) => {\n const items = value || [];\n return (\n <TagsEditor\n constraints={constraints}\n constraintsType={constraintsType}\n isDisabled={disabled}\n hasError={errors.length > 0}\n items={items}\n onUpdate={(items) => {\n setValue(items);\n }}\n />\n );\n }}\n </FieldConnector>\n );\n}\n\nTagsEditorContainer.defaultProps = {\n isInitiallyDisabled: true,\n};\n","import { TagsEditorContainer } from './TagsEditorContainer';\n\nexport const TagsEditor = TagsEditorContainer;\n"],"names":["styles","constraints","css","fontStyle","marginTop","tokens","spacingS","color","gray600","TagsEditorConstraints","props","constraintsType","React","Paragraph","className","testId","min","max","dropContainer","whiteSpace","display","flexWrap","input","marginBottom","spacingM","pill","marginRight","handle","lineHeight","padding","paddingRight","cursor","userSelect","svg","fill","gray500","verticalAlign","SortablePillHandle","SortableHandle","Icon","icon","SortablePill","SortableElement","Pill","label","onClose","disabled","onRemove","index","onDrag","noop","dragHandleComponent","SortableList","SortableContainer","children","TagsEditor","useState","pendingValue","setPendingValue","isDisabled","items","hasError","removeItem","useCallback","newItems","filter","_","filterIndex","onUpdate","swapItems","oldIndex","newIndex","arrayMove","TextInput","error","type","value","placeholder","onKeyDown","e","keyCode","onChange","target","useDragHandle","axis","distance","onSortEnd","map","item","key","isEmptyTagsValue","length","getConstraintsType","sizeConstraints","undefined","isNumber","TagsEditorContainer","field","validations","sizeValidations","validation","size","FieldConnector","isInitiallyDisabled","isEmptyValue","throttle","errors","setValue","defaultProps"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contentful/field-editor-tags",
3
- "version": "0.13.5",
3
+ "version": "0.14.3",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/field-editor-tags.esm.js",
6
6
  "typings": "dist/index.d.ts",
@@ -21,9 +21,9 @@
21
21
  "tsc": "tsc -p ./ --noEmit"
22
22
  },
23
23
  "dependencies": {
24
- "@contentful/field-editor-shared": "^0.21.0",
25
- "@contentful/forma-36-react-components": "^3.79.5",
26
- "@contentful/forma-36-tokens": "^0.10.1",
24
+ "@contentful/field-editor-shared": "^0.23.0",
25
+ "@contentful/forma-36-react-components": "^3.93.4",
26
+ "@contentful/forma-36-tokens": "^0.11.0",
27
27
  "array-move": "^3.0.0",
28
28
  "emotion": "^10.0.0",
29
29
  "lodash": "^4.17.15",
@@ -31,7 +31,7 @@
31
31
  "react-sortable-hoc": "^2.0.0"
32
32
  },
33
33
  "devDependencies": {
34
- "@contentful/field-editor-test-utils": "^0.16.0"
34
+ "@contentful/field-editor-test-utils": "^0.17.2"
35
35
  },
36
36
  "peerDependencies": {
37
37
  "react": ">=16.8.0"
@@ -46,5 +46,5 @@
46
46
  }
47
47
  }
48
48
  },
49
- "gitHead": "e170b6d0f76c9ccc1dbe95d11549135182b6ab3c"
49
+ "gitHead": "4020000939175ec415639fbc3b7b20e011c2a8a7"
50
50
  }