@ynput/ayon-frontend-shared 0.3.21 → 0.3.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/index.cjs14.js +1 -1
- package/dist/_virtual/index.cjs22.js +1 -1
- package/dist/_virtual/index.cjs23.js +1 -1
- package/dist/_virtual/index.cjs24.js +1 -1
- package/dist/_virtual/index.cjs9.js +1 -1
- package/dist/_virtual/index.es10.js +2 -2
- package/dist/_virtual/index.es11.js +2 -2
- package/dist/_virtual/index.es13.js +2 -2
- package/dist/_virtual/index.es14.js +5 -2
- package/dist/_virtual/index.es14.js.map +1 -1
- package/dist/_virtual/index.es22.js +3 -3
- package/dist/_virtual/index.es23.js +5 -5
- package/dist/_virtual/index.es24.js +5 -5
- package/dist/_virtual/index.es9.js +2 -5
- package/dist/_virtual/index.es9.js.map +1 -1
- package/dist/node_modules/parse-numeric-range/index.cjs.js +1 -1
- package/dist/node_modules/parse-numeric-range/index.es.js +1 -1
- package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
- package/dist/node_modules/rehype/node_modules/vfile/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype/node_modules/vfile/lib/index.es.js +1 -1
- package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/module/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/module/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/type/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/type/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/index.cjs.js.map +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/sdk/dist/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/sdk/dist/index.es.js +1 -1
- package/dist/shared/node_modules/react-is/index.cjs.js +1 -1
- package/dist/shared/node_modules/react-is/index.es.js +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.cjs.js +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.cjs.js.map +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.es.js +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/Transition.cjs.js +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/Transition.cjs.js.map +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/Transition.es.js +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.cjs.js +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.cjs.js.map +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.es.js +1 -1
- package/dist/shared/src/components/EnumEditor/DraggableEnumEditorItem.cjs.js +1 -1
- package/dist/shared/src/components/EnumEditor/DraggableEnumEditorItem.cjs.js.map +1 -1
- package/dist/shared/src/components/EnumEditor/DraggableEnumEditorItem.es.js +26 -24
- package/dist/shared/src/components/EnumEditor/DraggableEnumEditorItem.es.js.map +1 -1
- package/dist/shared/src/components/EnumEditor/EnumEditor.cjs.js +1 -1
- package/dist/shared/src/components/EnumEditor/EnumEditor.cjs.js.map +1 -1
- package/dist/shared/src/components/EnumEditor/EnumEditor.es.js +63 -60
- package/dist/shared/src/components/EnumEditor/EnumEditor.es.js.map +1 -1
- package/dist/shared/src/components/EnumEditor/EnumEditorItem.cjs.js +1 -1
- package/dist/shared/src/components/EnumEditor/EnumEditorItem.cjs.js.map +1 -1
- package/dist/shared/src/components/EnumEditor/EnumEditorItem.es.js +113 -92
- package/dist/shared/src/components/EnumEditor/EnumEditorItem.es.js.map +1 -1
- package/dist/shared/src/components/EnumEditor/hooks/useDraggable.cjs.js +1 -1
- package/dist/shared/src/components/EnumEditor/hooks/useDraggable.cjs.js.map +1 -1
- package/dist/shared/src/components/EnumEditor/hooks/useDraggable.es.js +36 -28
- package/dist/shared/src/components/EnumEditor/hooks/useDraggable.es.js.map +1 -1
- package/dist/types/components/EnumEditor/DraggableEnumEditorItem.d.ts +2 -1
- package/dist/types/components/EnumEditor/EnumEditor.d.ts +2 -1
- package/dist/types/components/EnumEditor/EnumEditorItem.d.ts +2 -1
- package/dist/types/components/EnumEditor/hooks/useDraggable.d.ts +3 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnumEditor.es.js","sources":["../../../../../src/components/EnumEditor/EnumEditor.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { uniqueId } from 'lodash'\nimport { closestCenter, DndContext, DragEndEvent, DragOverlay, DragStartEvent } from '@dnd-kit/core'\nimport { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable'\n\nimport { Button } from '@ynput/ayon-react-components'\n\nimport DraggableEnumEditorItem, { DraggableEnumEditorItemProps } from './DraggableEnumEditorItem'\nimport * as Styled from './EnumEditor.styled'\nimport useDraggable from './hooks/useDraggable'\nimport { appendOrUpdateNumericSuffix } from './util'\n\nexport interface EnumEditorPt {\n item?: DraggableEnumEditorItemProps\n addButton?: Partial<React.ComponentProps<typeof Button>>\n}\n\nexport type AttributeData = {\n id: string\n isExpanded: boolean\n label: string\n value: string\n color?: string\n icon?: string\n isLabelFocused: boolean\n isNewAttribute: boolean\n}\n\nexport type NormalizedData = {\n label: string\n value: string | number | boolean\n color?: string\n icon?: string\n}\n\nconst creator = (): AttributeData => ({\n id: uniqueId(),\n isExpanded: true,\n label: '',\n value: '',\n isLabelFocused: true,\n isNewAttribute: false,\n})\n\nconst normalize = (data: AttributeData[]): NormalizedData[] => {\n return data\n .filter((item) => item.label !== '' && item.value !== '')\n .map(({ label, value, icon, color }) => {\n let normalizedValue = value\n return {\n label,\n value: normalizedValue,\n icon: icon || undefined,\n color: color || undefined,\n }\n })\n}\n\nconst denormalize = (data: NormalizedData[]): AttributeData[] => {\n return data.map(({ label, value, icon, color }) => {\n return {\n id: uniqueId(),\n isExpanded: false,\n label,\n value: value.toString(),\n icon: icon,\n color: color,\n isLabelFocused: false,\n isNewAttribute: false,\n }\n })\n}\n\nconst mergeIncomingItems = (\n currentItems: AttributeData[],\n incomingItems: AttributeData[],\n): AttributeData[] => {\n return incomingItems.map((incomingItem, index) => {\n const currentItem = currentItems[index]\n\n if (!currentItem) {\n return incomingItem\n }\n\n return {\n ...incomingItem,\n id: currentItem.id,\n isExpanded: currentItem.isExpanded,\n isLabelFocused: currentItem.isLabelFocused,\n isNewAttribute: currentItem.isNewAttribute,\n }\n })\n}\n\ninterface EnumEditorProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n values: NormalizedData[]\n onChange: (data: NormalizedData[]) => void\n pt?: EnumEditorPt\n}\nexport const EnumEditor = ({ values, onChange, pt, ...props }: EnumEditorProps) => {\n if (!values) {\n return null\n }\n\n const {\n items,\n handleAddItem,\n handleRemoveItem,\n handleChangeItem,\n handleDuplicateItem,\n handleDraggableEnd,\n } = useDraggable<AttributeData, NormalizedData>({\n creator,\n initialData: denormalize(values),\n onChange,\n normalizer: normalize,\n mergeIncomingData: mergeIncomingItems,\n })\n\n const handleDragStart = (event: DragStartEvent) => {\n setDraggedItemId(event.active.id as string)\n }\n\n const handleDragEnd = (event: DragEndEvent) => {\n setDraggedItemId(null)\n handleDraggableEnd(event)\n }\n\n const [draggedItemId, setDraggedItemId] = useState<string | null>()\n let draggedItem\n if (draggedItemId) {\n draggedItem = items.find((item) => item.id === draggedItemId)\n }\n\n return (\n <>\n <Styled.EnumListWrapper {...props}>\n <DndContext\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <SortableContext items={items} strategy={verticalListSortingStrategy}>\n {items.map((item, idx) => (\n <DraggableEnumEditorItem\n key={`DraggableAttributeEnum_${item.id}`}\n item={item}\n isBeingDragged={item.id === draggedItemId}\n onChange={handleChangeItem(idx)}\n onRemove={handleRemoveItem(idx)}\n onDuplicate={() =>\n handleDuplicateItem(idx, {\n isLabelFocused: true,\n isNewAttribute: true,\n label: appendOrUpdateNumericSuffix(\n items[idx].label,\n items.map((e) => e.label),\n ' ',\n ),\n value: appendOrUpdateNumericSuffix(\n items[idx].value,\n items.map((el) => el.value),\n '-',\n ),\n })\n }\n {...pt?.item}\n />\n ))}\n </SortableContext>\n\n {createPortal(\n <DragOverlay style={{}}>\n {draggedItem && <DraggableEnumEditorItem item={draggedItem} {...pt?.item} />}\n </DragOverlay>,\n document.body,\n )}\n </DndContext>\n\n <Button\n {...pt?.addButton}\n icon=\"add\"\n variant=\"text\"\n onClick={() => handleAddItem({ isNewAttribute: true })}\n className={pt?.addButton?.className}\n style={{ display: 'flex', justifyContent: 'start' }}\n >\n Add new item\n </Button>\n </Styled.EnumListWrapper>\n </>\n )\n}\n"],"names":["creator","uniqueId","normalize","data","item","label","value","icon","color","denormalize","mergeIncomingItems","currentItems","incomingItems","incomingItem","index","currentItem","EnumEditor","values","onChange","pt","props","items","handleAddItem","handleRemoveItem","handleChangeItem","handleDuplicateItem","handleDraggableEnd","useDraggable","handleDragStart","event","setDraggedItemId","handleDragEnd","draggedItemId","useState","draggedItem","jsxs","Styled.EnumListWrapper","DndContext","closestCenter","jsx","SortableContext","verticalListSortingStrategy","idx","DraggableEnumEditorItem","appendOrUpdateNumericSuffix","e","el","createPortal","DragOverlay","Button"],"mappings":";;;;;;;;;;;AAoCA,MAAMA,IAAU,OAAsB;AAAA,EACpC,IAAIC,EAAA;AAAA,EACJ,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,OAAO;AAAA,EACP,gBAAgB;AAAA,EAChB,gBAAgB;AAClB,IAEMC,IAAY,CAACC,MACVA,EACJ,OAAO,CAACC,MAASA,EAAK,UAAU,MAAMA,EAAK,UAAU,EAAE,EACvD,IAAI,CAAC,EAAE,OAAAC,GAAO,OAAAC,GAAO,MAAAC,GAAM,OAAAC,SAEnB;AAAA,EACL,OAAAH;AAAA,EACA,OAHoBC;AAAA,EAIpB,MAAMC,KAAQ;AAAA,EACd,OAAOC,KAAS;AAAA,EAEnB,GAGCC,IAAc,CAACN,MACZA,EAAK,IAAI,CAAC,EAAE,OAAAE,GAAO,OAAAC,GAAO,MAAAC,GAAM,OAAAC,SAC9B;AAAA,EACL,IAAIP,EAAA;AAAA,EACJ,YAAY;AAAA,EACZ,OAAAI;AAAA,EACA,OAAOC,EAAM,SAAA;AAAA,EACb,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAEnB,GAGGE,IAAqB,CACzBC,GACAC,MAEOA,EAAc,IAAI,CAACC,GAAcC,MAAU;AAChD,QAAMC,IAAcJ,EAAaG,CAAK;AAEtC,SAAKC,IAIE;AAAA,IACL,GAAGF;AAAA,IACH,IAAIE,EAAY;AAAA,IAChB,YAAYA,EAAY;AAAA,IACxB,gBAAgBA,EAAY;AAAA,IAC5B,gBAAgBA,EAAY;AAAA,EAAA,IARrBF;AAUX,CAAC,
|
|
1
|
+
{"version":3,"file":"EnumEditor.es.js","sources":["../../../../../src/components/EnumEditor/EnumEditor.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { uniqueId } from 'lodash'\nimport { closestCenter, DndContext, DragEndEvent, DragOverlay, DragStartEvent } from '@dnd-kit/core'\nimport { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable'\n\nimport { Button } from '@ynput/ayon-react-components'\n\nimport DraggableEnumEditorItem, { DraggableEnumEditorItemProps } from './DraggableEnumEditorItem'\nimport * as Styled from './EnumEditor.styled'\nimport useDraggable from './hooks/useDraggable'\nimport { appendOrUpdateNumericSuffix } from './util'\n\nexport interface EnumEditorPt {\n item?: DraggableEnumEditorItemProps\n addButton?: Partial<React.ComponentProps<typeof Button>>\n}\n\nexport type AttributeData = {\n id: string\n isExpanded: boolean\n label: string\n value: string\n color?: string\n icon?: string\n isLabelFocused: boolean\n isNewAttribute: boolean\n}\n\nexport type NormalizedData = {\n label: string\n value: string | number | boolean\n color?: string\n icon?: string\n}\n\nconst creator = (): AttributeData => ({\n id: uniqueId(),\n isExpanded: true,\n label: '',\n value: '',\n isLabelFocused: true,\n isNewAttribute: false,\n})\n\nconst normalize = (data: AttributeData[]): NormalizedData[] => {\n return data\n .filter((item) => item.label !== '' && item.value !== '')\n .map(({ label, value, icon, color }) => {\n let normalizedValue = value\n return {\n label,\n value: normalizedValue,\n icon: icon || undefined,\n color: color || undefined,\n }\n })\n}\n\nconst denormalize = (data: NormalizedData[]): AttributeData[] => {\n return data.map(({ label, value, icon, color }) => {\n return {\n id: uniqueId(),\n isExpanded: false,\n label,\n value: value.toString(),\n icon: icon,\n color: color,\n isLabelFocused: false,\n isNewAttribute: false,\n }\n })\n}\n\nconst mergeIncomingItems = (\n currentItems: AttributeData[],\n incomingItems: AttributeData[],\n): AttributeData[] => {\n return incomingItems.map((incomingItem, index) => {\n const currentItem = currentItems[index]\n\n if (!currentItem) {\n return incomingItem\n }\n\n return {\n ...incomingItem,\n id: currentItem.id,\n isExpanded: currentItem.isExpanded,\n isLabelFocused: currentItem.isLabelFocused,\n isNewAttribute: currentItem.isNewAttribute,\n }\n })\n}\n\ninterface EnumEditorProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n values: NormalizedData[]\n onChange: (data: NormalizedData[]) => void\n onCommit?: (data: NormalizedData[]) => void\n pt?: EnumEditorPt\n}\nexport const EnumEditor = ({ values, onChange, onCommit, pt, ...props }: EnumEditorProps) => {\n if (!values) {\n return null\n }\n\n const {\n items,\n handleAddItem,\n handleRemoveItem,\n handleChangeItem,\n handleCommitItem,\n handleDuplicateItem,\n handleDraggableEnd,\n } = useDraggable<AttributeData, NormalizedData>({\n creator,\n initialData: denormalize(values),\n onChange,\n onCommit,\n normalizer: normalize,\n mergeIncomingData: mergeIncomingItems,\n })\n\n const handleDragStart = (event: DragStartEvent) => {\n setDraggedItemId(event.active.id as string)\n }\n\n const handleDragEnd = (event: DragEndEvent) => {\n setDraggedItemId(null)\n handleDraggableEnd(event)\n }\n\n const [draggedItemId, setDraggedItemId] = useState<string | null>()\n let draggedItem\n if (draggedItemId) {\n draggedItem = items.find((item) => item.id === draggedItemId)\n }\n\n return (\n <>\n <Styled.EnumListWrapper {...props}>\n <DndContext\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <SortableContext items={items} strategy={verticalListSortingStrategy}>\n {items.map((item, idx) => (\n <DraggableEnumEditorItem\n key={`DraggableAttributeEnum_${item.id}`}\n item={item}\n isBeingDragged={item.id === draggedItemId}\n onChange={handleChangeItem(idx)}\n onCommit={handleCommitItem(idx)}\n onRemove={handleRemoveItem(idx)}\n onDuplicate={() =>\n handleDuplicateItem(idx, {\n isLabelFocused: true,\n isNewAttribute: true,\n label: appendOrUpdateNumericSuffix(\n items[idx].label,\n items.map((e) => e.label),\n ' ',\n ),\n value: appendOrUpdateNumericSuffix(\n items[idx].value,\n items.map((el) => el.value),\n '-',\n ),\n })\n }\n {...pt?.item}\n />\n ))}\n </SortableContext>\n\n {createPortal(\n <DragOverlay style={{}}>\n {draggedItem && <DraggableEnumEditorItem item={draggedItem} {...pt?.item} />}\n </DragOverlay>,\n document.body,\n )}\n </DndContext>\n\n <Button\n {...pt?.addButton}\n icon=\"add\"\n variant=\"text\"\n onClick={() => handleAddItem({ isNewAttribute: true })}\n className={pt?.addButton?.className}\n style={{ display: 'flex', justifyContent: 'start' }}\n >\n Add new item\n </Button>\n </Styled.EnumListWrapper>\n </>\n )\n}\n"],"names":["creator","uniqueId","normalize","data","item","label","value","icon","color","denormalize","mergeIncomingItems","currentItems","incomingItems","incomingItem","index","currentItem","EnumEditor","values","onChange","onCommit","pt","props","items","handleAddItem","handleRemoveItem","handleChangeItem","handleCommitItem","handleDuplicateItem","handleDraggableEnd","useDraggable","handleDragStart","event","setDraggedItemId","handleDragEnd","draggedItemId","useState","draggedItem","jsxs","Styled.EnumListWrapper","DndContext","closestCenter","jsx","SortableContext","verticalListSortingStrategy","idx","DraggableEnumEditorItem","appendOrUpdateNumericSuffix","e","el","createPortal","DragOverlay","Button"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const
|
|
1
|
+
"use strict";const l=require("../../../../_virtual/jsx-runtime.cjs.js"),i=require("react"),R=require("lodash"),r=require("./EnumEditor.styled.cjs.js"),c=require("clsx"),A=({item:u,onChange:a,onCommit:t,onRemove:N,onDuplicate:w,showRemoveButton:d=!0,showDuplicateButton:E=!0,autoFocus:o=!1,isExpanded:j=!0,className:y,pt:s,...h})=>{const{label:m,value:g,icon:n,color:x,isNewAttribute:p}=u,v=i.useRef(null),b=i.useRef(null),f=i.useRef(null),k=i.useRef(null);return i.useEffect(()=>{(o||u.isNewAttribute)&&v.current?.select()},[o,u.isNewAttribute]),i.useEffect(()=>{j&&!o&&!u.isNewAttribute&&setTimeout(()=>v.current?.focus(),250)},[j,o,u.isNewAttribute]),l.jsxRuntimeExports.jsxs(r.EnumItemBody,{...s?.wrapper,...h,className:c(y,s?.wrapper?.className,{expanded:j,collapsed:!j}),children:[l.jsxRuntimeExports.jsxs(r.Row,{...s?.label?.wrapper,children:[l.jsxRuntimeExports.jsx(r.Label,{...s?.label?.label,children:"Label"}),l.jsxRuntimeExports.jsx(r.InputText,{ref:v,value:m,autoFocus:o||p,...s?.label?.input,className:c(s?.label?.input?.className),onChange:e=>{if(!p)return a&&a(["label"],[e.target.value]);b.current&&(b.current.value=R.kebabCase(e.target.value)),a&&a(["label","value"],[e.target.value,R.kebabCase(e.target.value)])},onBlur:e=>{p?t&&t(["label","value"],[e.target.value,R.kebabCase(e.target.value)]):t&&t(["label"],[e.target.value])},onKeyDown:e=>{e.key==="Enter"&&(p?t&&t(["label","value"],[e.target.value,R.kebabCase(e.target.value)]):t&&t(["label"],[e.target.value]))},placeholder:"Enter label"})]},"label"),l.jsxRuntimeExports.jsxs(r.Row,{...s?.value?.wrapper,children:[l.jsxRuntimeExports.jsx(r.Label,{...s?.value?.label,children:"Value"}),l.jsxRuntimeExports.jsx(r.InputText,{ref:b,value:b.current?.value||g,...s?.value?.input,className:c(s?.value?.input?.className),onChange:e=>a&&a(["value"],[e.target.value]),onBlur:e=>t&&t(["value"],[e.target.value]),onKeyDown:e=>{e.key==="Enter"&&t&&t(["value"],[e.target.value])},placeholder:"Enter value"})]},"value"),l.jsxRuntimeExports.jsxs(r.Row,{...s?.icon?.wrapper,children:[l.jsxRuntimeExports.jsx(r.Label,{...s?.icon?.label,children:"Icon"}),l.jsxRuntimeExports.jsxs(r.PlaceholderWrapper,{style:{position:"relative"},children:[l.jsxRuntimeExports.jsx(r.Placeholder,{style:{display:n?"none":"flex"},onClick:()=>{k.current?.open()},children:"Pick an icon..."}),l.jsxRuntimeExports.jsx(r.IconSelect,{ref:k,value:[n||"question_mark"],widthExpand:!0,...s?.icon?.input,className:c(s?.icon?.input?.className),style:{position:n?"relative":"absolute",visibility:n?"visible":"hidden",...s?.icon?.input?.style},onChange:e=>{a&&a(["icon"],[e[0]]),t&&t(["icon"],[e[0]])}}),n&&l.jsxRuntimeExports.jsx(r.Button,{icon:"close",variant:"text",onClick:()=>{a&&a(["icon"],[void 0])}})]})]},"icon"),l.jsxRuntimeExports.jsxs(r.Row,{...s?.color?.wrapper,children:[l.jsxRuntimeExports.jsx(r.Label,{...s?.color?.label,children:"Color"}),l.jsxRuntimeExports.jsxs(r.PlaceholderWrapper,{style:{position:"relative"},children:[l.jsxRuntimeExports.jsxs(r.ColorPicker,{className:x?"active":"",style:{backgroundColor:x||void 0},onClick:()=>f.current?.click(),children:[x?"":"Pick a color...",l.jsxRuntimeExports.jsx("input",{type:"color",ref:f,value:x||"#000000",...s?.color?.input,className:c(s?.color?.input?.className),onChange:e=>{a&&a(["color"],[e?.target.value.toString()]),t&&t(["color"],[e?.target.value.toString()])}})]}),x&&l.jsxRuntimeExports.jsx(r.Button,{icon:"close",variant:"text",onClick:()=>{a&&a(["color"],[void 0])}})]})]},"color"),(d||E)&&l.jsxRuntimeExports.jsxs(r.Row,{...s?.footer,className:c("footer",s?.footer?.className),children:[d&&l.jsxRuntimeExports.jsx(r.ActionWrapper,{children:l.jsxRuntimeExports.jsx(r.Button,{icon:"close",variant:"text",onClick:N,children:"Remove"})}),E&&l.jsxRuntimeExports.jsx(r.ActionWrapper,{children:l.jsxRuntimeExports.jsx(r.Button,{icon:"content_copy",variant:"text",onClick:w,children:"Duplicate"})})]})]})};module.exports=A;
|
|
2
2
|
//# sourceMappingURL=EnumEditorItem.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnumEditorItem.cjs.js","sources":["../../../../../src/components/EnumEditor/EnumEditorItem.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport { kebabCase } from 'lodash'\n\nimport { DropdownRef, Icon } from '@ynput/ayon-react-components'\n\nimport * as Styled from './EnumEditor.styled'\nimport { AttributeData } from './EnumEditor'\nimport clsx from 'clsx'\n\ntype DivPt = Partial<React.HTMLAttributes<HTMLDivElement>>\n\ntype TextInputPt = Partial<React.ComponentProps<typeof Styled.InputText>>\ntype IconInputPt = Partial<React.ComponentProps<typeof Styled.IconSelect>>\ntype ColorInputPt = Partial<React.InputHTMLAttributes<HTMLInputElement>>\n\nexport interface EnumEditorFieldPt<TInput> {\n wrapper?: DivPt\n label?: DivPt\n input?: Partial<TInput>\n}\n\nexport interface EnumEditorItemPt {\n wrapper?: DivPt\n label?: EnumEditorFieldPt<TextInputPt>\n value?: EnumEditorFieldPt<TextInputPt>\n icon?: EnumEditorFieldPt<IconInputPt>\n color?: EnumEditorFieldPt<ColorInputPt>\n footer?: DivPt\n}\n\nexport interface EnumEditorItemProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n item: AttributeData\n onChange?: (attr: (keyof AttributeData)[], value: (boolean | string | undefined)[]) => void\n onRemove?: () => void\n onDuplicate?: () => void\n showRemoveButton?: boolean\n showDuplicateButton?: boolean\n autoFocus?: boolean\n isExpanded?: boolean\n pt?: EnumEditorItemPt\n}\n\nconst EnumEditorItem = ({\n item,\n onChange,\n onRemove,\n onDuplicate,\n showRemoveButton = true,\n showDuplicateButton = true,\n autoFocus = false,\n isExpanded = true,\n className,\n pt,\n ...props\n}: EnumEditorItemProps) => {\n const { label, value, icon, color, isNewAttribute } = item\n const labelRef = useRef<HTMLInputElement>(null)\n const valueRef = useRef<HTMLInputElement>(null)\n const colorPickerRef = useRef<HTMLInputElement>(null)\n const iconSelectRef = useRef<DropdownRef>(null)\n\n useEffect(() => {\n if (autoFocus || item.isNewAttribute) {\n labelRef.current?.select()\n }\n }, [autoFocus, item.isNewAttribute])\n\n // Handle focus when item becomes expanded\n useEffect(() => {\n if (isExpanded && !autoFocus && !item.isNewAttribute) {\n // Avoids jittery expand animation\n setTimeout(() => labelRef.current?.focus(), 250)\n }\n }, [isExpanded, autoFocus, item.isNewAttribute])\n\n return (\n <Styled.EnumItemBody\n {...pt?.wrapper}\n {...props}\n className={clsx(className, pt?.wrapper?.className, {\n expanded: isExpanded,\n collapsed: !isExpanded,\n })}\n >\n <Styled.Row key=\"label\" {...pt?.label?.wrapper}>\n <Styled.Label {...pt?.label?.label}>Label</Styled.Label>\n <Styled.InputText\n ref={labelRef}\n value={label}\n autoFocus={autoFocus || isNewAttribute}\n {...pt?.label?.input}\n className={clsx(pt?.label?.input?.className)}\n onChange={(event) => {\n if (!isNewAttribute) {\n return onChange && onChange(['label'], [event.target.value])\n }\n if (valueRef.current) {\n valueRef.current.value = kebabCase(event.target.value)\n }\n onChange &&\n onChange(['label', 'value'], [event.target.value, kebabCase(event.target.value)])\n }}\n placeholder=\"Enter label\"\n />\n </Styled.Row>\n\n <Styled.Row key=\"value\" {...pt?.value?.wrapper}>\n <Styled.Label {...pt?.value?.label}>Value</Styled.Label>\n <Styled.InputText\n ref={valueRef}\n value={valueRef.current?.value || value}\n {...pt?.value?.input}\n className={clsx(pt?.value?.input?.className)}\n onChange={(event) => onChange && onChange(['value'], [event.target.value])}\n placeholder=\"Enter value\"\n />\n </Styled.Row>\n\n <Styled.Row key=\"icon\" {...pt?.icon?.wrapper}>\n <Styled.Label {...pt?.icon?.label}>Icon</Styled.Label>\n\n <Styled.PlaceholderWrapper style={{ position: 'relative' }}>\n <Styled.Placeholder\n style={{ display: icon ? 'none' : 'flex' }}\n onClick={() => {\n iconSelectRef.current?.open()\n }}\n >\n Pick an icon...\n </Styled.Placeholder>\n\n <Styled.IconSelect\n ref={iconSelectRef}\n value={[icon || 'question_mark']}\n widthExpand\n {...pt?.icon?.input}\n className={clsx(pt?.icon?.input?.className)}\n style={{\n position: icon ? 'relative' : 'absolute',\n visibility: icon ? 'visible' : 'hidden',\n ...pt?.icon?.input?.style,\n }}\n onChange={(value) => {\n return onChange && onChange(['icon'], [value[0]])\n }}\n />\n {icon && (\n <Styled.Button\n icon=\"close\"\n variant=\"text\"\n onClick={() => {\n onChange && onChange(['icon'], [undefined])\n }}\n />\n )}\n </Styled.PlaceholderWrapper>\n </Styled.Row>\n\n <Styled.Row key=\"color\" {...pt?.color?.wrapper}>\n <Styled.Label {...pt?.color?.label}>Color</Styled.Label>\n\n <Styled.PlaceholderWrapper style={{ position: 'relative' }}>\n <Styled.ColorPicker\n className={color ? 'active' : ''}\n style={{ backgroundColor: color || undefined }}\n onClick={() => colorPickerRef.current?.click()}\n >\n {!color ? 'Pick a color...' : ''}\n <input\n type=\"color\"\n ref={colorPickerRef}\n value={color || '#000000'}\n {...pt?.color?.input}\n className={clsx(pt?.color?.input?.className)}\n onChange={(event) =>\n onChange && onChange(['color'], [event?.target.value.toString()])\n }\n />\n </Styled.ColorPicker>\n {color && (\n <Styled.Button\n icon=\"close\"\n variant=\"text\"\n onClick={() => {\n onChange && onChange(['color'], [undefined])\n }}\n />\n )}\n </Styled.PlaceholderWrapper>\n </Styled.Row>\n\n {(showRemoveButton || showDuplicateButton) && (\n <Styled.Row {...pt?.footer} className={clsx('footer', pt?.footer?.className)}>\n {showRemoveButton && (\n <Styled.ActionWrapper>\n <Styled.Button icon=\"close\" variant=\"text\" onClick={onRemove}>\n Remove\n </Styled.Button>\n </Styled.ActionWrapper>\n )}\n {showDuplicateButton && (\n <Styled.ActionWrapper>\n <Styled.Button icon=\"content_copy\" variant=\"text\" onClick={onDuplicate}>\n Duplicate\n </Styled.Button>\n </Styled.ActionWrapper>\n )}\n </Styled.Row>\n )}\n </Styled.EnumItemBody>\n )\n}\n\nexport default EnumEditorItem\n"],"names":["EnumEditorItem","item","onChange","onRemove","onDuplicate","showRemoveButton","showDuplicateButton","autoFocus","isExpanded","className","pt","props","label","value","icon","color","isNewAttribute","labelRef","useRef","valueRef","colorPickerRef","iconSelectRef","useEffect","jsxs","Styled.EnumItemBody","clsx","Styled.Row","jsx","Styled.Label","Styled.InputText","event","kebabCase","Styled.PlaceholderWrapper","Styled.Placeholder","Styled.IconSelect","Styled.Button","Styled.ColorPicker","Styled.ActionWrapper"],"mappings":"yKA2CMA,EAAiB,CAAC,CACtB,KAAAC,EACA,SAAAC,EACA,SAAAC,EACA,YAAAC,EACA,iBAAAC,EAAmB,GACnB,oBAAAC,EAAsB,GACtB,UAAAC,EAAY,GACZ,WAAAC,EAAa,GACb,UAAAC,EACA,GAAAC,EACA,GAAGC,CACL,IAA2B,CACzB,KAAM,CAAE,MAAAC,EAAO,MAAAC,EAAO,KAAAC,EAAM,MAAAC,EAAO,eAAAC,GAAmBf,EAChDgB,EAAWC,EAAAA,OAAyB,IAAI,EACxCC,EAAWD,EAAAA,OAAyB,IAAI,EACxCE,EAAiBF,EAAAA,OAAyB,IAAI,EAC9CG,EAAgBH,EAAAA,OAAoB,IAAI,EAE9CI,OAAAA,EAAAA,UAAU,IAAM,EACVf,GAAaN,EAAK,iBACpBgB,EAAS,SAAS,OAAA,CAEtB,EAAG,CAACV,EAAWN,EAAK,cAAc,CAAC,EAGnCqB,EAAAA,UAAU,IAAM,CACVd,GAAc,CAACD,GAAa,CAACN,EAAK,gBAEpC,WAAW,IAAMgB,EAAS,SAAS,MAAA,EAAS,GAAG,CAEnD,EAAG,CAACT,EAAYD,EAAWN,EAAK,cAAc,CAAC,EAG7CsB,EAAAA,kBAAAA,KAACC,EAAAA,aAAA,CACE,GAAGd,GAAI,QACP,GAAGC,EACJ,UAAWc,EAAKhB,EAAWC,GAAI,SAAS,UAAW,CACjD,SAAUF,EACV,UAAW,CAACA,CAAA,CACb,EAED,SAAA,CAAAe,EAAAA,kBAAAA,KAACG,EAAAA,IAAA,CAAwB,GAAGhB,GAAI,OAAO,QACrC,SAAA,CAAAiB,wBAACC,EAAAA,MAAA,CAAc,GAAGlB,GAAI,OAAO,MAAO,SAAA,QAAK,EACzCiB,EAAAA,kBAAAA,IAACE,EAAAA,UAAA,CACC,IAAKZ,EACL,MAAOL,EACP,UAAWL,GAAaS,EACvB,GAAGN,GAAI,OAAO,MACf,UAAWe,EAAKf,GAAI,OAAO,OAAO,SAAS,EAC3C,SAAWoB,GAAU,CACnB,GAAI,CAACd,EACH,OAAOd,GAAYA,EAAS,CAAC,OAAO,EAAG,CAAC4B,EAAM,OAAO,KAAK,CAAC,EAEzDX,EAAS,UACXA,EAAS,QAAQ,MAAQY,EAAAA,UAAUD,EAAM,OAAO,KAAK,GAEvD5B,GACEA,EAAS,CAAC,QAAS,OAAO,EAAG,CAAC4B,EAAM,OAAO,MAAOC,EAAAA,UAAUD,EAAM,OAAO,KAAK,CAAC,CAAC,CACpF,EACA,YAAY,aAAA,CAAA,CACd,CAAA,EAnBc,OAoBhB,2BAECJ,EAAAA,IAAA,CAAwB,GAAGhB,GAAI,OAAO,QACrC,SAAA,CAAAiB,wBAACC,EAAAA,MAAA,CAAc,GAAGlB,GAAI,OAAO,MAAO,SAAA,QAAK,EACzCiB,EAAAA,kBAAAA,IAACE,EAAAA,UAAA,CACC,IAAKV,EACL,MAAOA,EAAS,SAAS,OAASN,EACjC,GAAGH,GAAI,OAAO,MACf,UAAWe,EAAKf,GAAI,OAAO,OAAO,SAAS,EAC3C,SAAWoB,GAAU5B,GAAYA,EAAS,CAAC,OAAO,EAAG,CAAC4B,EAAM,OAAO,KAAK,CAAC,EACzE,YAAY,aAAA,CAAA,CACd,CAAA,EATc,OAUhB,2BAECJ,EAAAA,IAAA,CAAuB,GAAGhB,GAAI,MAAM,QACnC,SAAA,CAAAiB,wBAACC,EAAAA,MAAA,CAAc,GAAGlB,GAAI,MAAM,MAAO,SAAA,OAAI,EAEvCa,EAAAA,kBAAAA,KAACS,EAAAA,mBAAA,CAA0B,MAAO,CAAE,SAAU,YAC5C,SAAA,CAAAL,EAAAA,kBAAAA,IAACM,EAAAA,YAAA,CACC,MAAO,CAAE,QAASnB,EAAO,OAAS,MAAA,EAClC,QAAS,IAAM,CACbO,EAAc,SAAS,KAAA,CACzB,EACD,SAAA,iBAAA,CAAA,EAIDM,EAAAA,kBAAAA,IAACO,EAAAA,WAAA,CACC,IAAKb,EACL,MAAO,CAACP,GAAQ,eAAe,EAC/B,YAAW,GACV,GAAGJ,GAAI,MAAM,MACd,UAAWe,EAAKf,GAAI,MAAM,OAAO,SAAS,EAC1C,MAAO,CACL,SAAUI,EAAO,WAAa,WAC9B,WAAYA,EAAO,UAAY,SAC/B,GAAGJ,GAAI,MAAM,OAAO,KAAA,EAEtB,SAAWG,GACFX,GAAYA,EAAS,CAAC,MAAM,EAAG,CAACW,EAAM,CAAC,CAAC,CAAC,CAClD,CAAA,EAEDC,GACCa,EAAAA,kBAAAA,IAACQ,EAAAA,OAAA,CACC,KAAK,QACL,QAAQ,OACR,QAAS,IAAM,CACbjC,GAAYA,EAAS,CAAC,MAAM,EAAG,CAAC,MAAS,CAAC,CAC5C,CAAA,CAAA,CACF,CAAA,CAEJ,CAAA,CAAA,EArCc,MAsChB,2BAECwB,EAAAA,IAAA,CAAwB,GAAGhB,GAAI,OAAO,QACrC,SAAA,CAAAiB,wBAACC,EAAAA,MAAA,CAAc,GAAGlB,GAAI,OAAO,MAAO,SAAA,QAAK,EAEzCa,EAAAA,kBAAAA,KAACS,EAAAA,mBAAA,CAA0B,MAAO,CAAE,SAAU,YAC5C,SAAA,CAAAT,EAAAA,kBAAAA,KAACa,EAAAA,YAAA,CACC,UAAWrB,EAAQ,SAAW,GAC9B,MAAO,CAAE,gBAAiBA,GAAS,MAAA,EACnC,QAAS,IAAMK,EAAe,SAAS,MAAA,EAEtC,SAAA,CAACL,EAA4B,GAApB,kBACVY,EAAAA,kBAAAA,IAAC,QAAA,CACC,KAAK,QACL,IAAKP,EACL,MAAOL,GAAS,UACf,GAAGL,GAAI,OAAO,MACf,UAAWe,EAAKf,GAAI,OAAO,OAAO,SAAS,EAC3C,SAAWoB,GACT5B,GAAYA,EAAS,CAAC,OAAO,EAAG,CAAC4B,GAAO,OAAO,MAAM,SAAA,CAAU,CAAC,CAAA,CAAA,CAEpE,CAAA,CAAA,EAEDf,GACCY,EAAAA,kBAAAA,IAACQ,EAAAA,OAAA,CACC,KAAK,QACL,QAAQ,OACR,QAAS,IAAM,CACbjC,GAAYA,EAAS,CAAC,OAAO,EAAG,CAAC,MAAS,CAAC,CAC7C,CAAA,CAAA,CACF,CAAA,CAEJ,CAAA,CAAA,EA9Bc,OA+BhB,GAEEG,GAAoBC,IACpBiB,EAAAA,kBAAAA,KAACG,EAAAA,IAAA,CAAY,GAAGhB,GAAI,OAAQ,UAAWe,EAAK,SAAUf,GAAI,QAAQ,SAAS,EACxE,SAAA,CAAAL,GACCsB,EAAAA,kBAAAA,IAACU,gBAAA,CACC,iCAACF,EAAAA,OAAA,CAAc,KAAK,QAAQ,QAAQ,OAAO,QAAShC,EAAU,kBAE9D,EACF,EAEDG,GACCqB,EAAAA,kBAAAA,IAACU,EAAAA,cAAA,CACC,iCAACF,EAAAA,OAAA,CAAc,KAAK,eAAe,QAAQ,OAAO,QAAS/B,EAAa,qBAExE,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAAA,CAAA,CAIR"}
|
|
1
|
+
{"version":3,"file":"EnumEditorItem.cjs.js","sources":["../../../../../src/components/EnumEditor/EnumEditorItem.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport { kebabCase } from 'lodash'\n\nimport { DropdownRef, Icon } from '@ynput/ayon-react-components'\n\nimport * as Styled from './EnumEditor.styled'\nimport { AttributeData } from './EnumEditor'\nimport clsx from 'clsx'\n\ntype DivPt = Partial<React.HTMLAttributes<HTMLDivElement>>\n\ntype TextInputPt = Partial<React.ComponentProps<typeof Styled.InputText>>\ntype IconInputPt = Partial<React.ComponentProps<typeof Styled.IconSelect>>\ntype ColorInputPt = Partial<React.InputHTMLAttributes<HTMLInputElement>>\n\nexport interface EnumEditorFieldPt<TInput> {\n wrapper?: DivPt\n label?: DivPt\n input?: Partial<TInput>\n}\n\nexport interface EnumEditorItemPt {\n wrapper?: DivPt\n label?: EnumEditorFieldPt<TextInputPt>\n value?: EnumEditorFieldPt<TextInputPt>\n icon?: EnumEditorFieldPt<IconInputPt>\n color?: EnumEditorFieldPt<ColorInputPt>\n footer?: DivPt\n}\n\nexport interface EnumEditorItemProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n item: AttributeData\n onChange?: (attr: (keyof AttributeData)[], value: (boolean | string | undefined)[]) => void\n onCommit?: (attr: (keyof AttributeData)[], value: (boolean | string | undefined)[]) => void\n onRemove?: () => void\n onDuplicate?: () => void\n showRemoveButton?: boolean\n showDuplicateButton?: boolean\n autoFocus?: boolean\n isExpanded?: boolean\n pt?: EnumEditorItemPt\n}\n\nconst EnumEditorItem = ({\n item,\n onChange,\n onCommit,\n onRemove,\n onDuplicate,\n showRemoveButton = true,\n showDuplicateButton = true,\n autoFocus = false,\n isExpanded = true,\n className,\n pt,\n ...props\n}: EnumEditorItemProps) => {\n const { label, value, icon, color, isNewAttribute } = item\n const labelRef = useRef<HTMLInputElement>(null)\n const valueRef = useRef<HTMLInputElement>(null)\n const colorPickerRef = useRef<HTMLInputElement>(null)\n const iconSelectRef = useRef<DropdownRef>(null)\n\n useEffect(() => {\n if (autoFocus || item.isNewAttribute) {\n labelRef.current?.select()\n }\n }, [autoFocus, item.isNewAttribute])\n\n // Handle focus when item becomes expanded\n useEffect(() => {\n if (isExpanded && !autoFocus && !item.isNewAttribute) {\n // Avoids jittery expand animation\n setTimeout(() => labelRef.current?.focus(), 250)\n }\n }, [isExpanded, autoFocus, item.isNewAttribute])\n\n return (\n <Styled.EnumItemBody\n {...pt?.wrapper}\n {...props}\n className={clsx(className, pt?.wrapper?.className, {\n expanded: isExpanded,\n collapsed: !isExpanded,\n })}\n >\n <Styled.Row key=\"label\" {...pt?.label?.wrapper}>\n <Styled.Label {...pt?.label?.label}>Label</Styled.Label>\n <Styled.InputText\n ref={labelRef}\n value={label}\n autoFocus={autoFocus || isNewAttribute}\n {...pt?.label?.input}\n className={clsx(pt?.label?.input?.className)}\n onChange={(event) => {\n if (!isNewAttribute) {\n return onChange && onChange(['label'], [event.target.value])\n }\n if (valueRef.current) {\n valueRef.current.value = kebabCase(event.target.value)\n }\n onChange &&\n onChange(['label', 'value'], [event.target.value, kebabCase(event.target.value)])\n }}\n onBlur={(event) => {\n if (!isNewAttribute) {\n onCommit && onCommit(['label'], [event.target.value])\n } else {\n onCommit &&\n onCommit(['label', 'value'], [event.target.value, kebabCase(event.target.value)])\n }\n }}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n if (!isNewAttribute) {\n onCommit && onCommit(['label'], [(event.target as HTMLInputElement).value])\n } else {\n onCommit &&\n onCommit(\n ['label', 'value'],\n [\n (event.target as HTMLInputElement).value,\n kebabCase((event.target as HTMLInputElement).value),\n ],\n )\n }\n }\n }}\n placeholder=\"Enter label\"\n />\n </Styled.Row>\n\n <Styled.Row key=\"value\" {...pt?.value?.wrapper}>\n <Styled.Label {...pt?.value?.label}>Value</Styled.Label>\n <Styled.InputText\n ref={valueRef}\n value={valueRef.current?.value || value}\n {...pt?.value?.input}\n className={clsx(pt?.value?.input?.className)}\n onChange={(event) => onChange && onChange(['value'], [event.target.value])}\n onBlur={(event) => onCommit && onCommit(['value'], [event.target.value])}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n onCommit && onCommit(['value'], [(event.target as HTMLInputElement).value])\n }\n }}\n placeholder=\"Enter value\"\n />\n </Styled.Row>\n\n <Styled.Row key=\"icon\" {...pt?.icon?.wrapper}>\n <Styled.Label {...pt?.icon?.label}>Icon</Styled.Label>\n\n <Styled.PlaceholderWrapper style={{ position: 'relative' }}>\n <Styled.Placeholder\n style={{ display: icon ? 'none' : 'flex' }}\n onClick={() => {\n iconSelectRef.current?.open()\n }}\n >\n Pick an icon...\n </Styled.Placeholder>\n\n <Styled.IconSelect\n ref={iconSelectRef}\n value={[icon || 'question_mark']}\n widthExpand\n {...pt?.icon?.input}\n className={clsx(pt?.icon?.input?.className)}\n style={{\n position: icon ? 'relative' : 'absolute',\n visibility: icon ? 'visible' : 'hidden',\n ...pt?.icon?.input?.style,\n }}\n onChange={(value) => {\n onChange && onChange(['icon'], [value[0]])\n onCommit && onCommit(['icon'], [value[0]])\n }}\n />\n {icon && (\n <Styled.Button\n icon=\"close\"\n variant=\"text\"\n onClick={() => {\n onChange && onChange(['icon'], [undefined])\n }}\n />\n )}\n </Styled.PlaceholderWrapper>\n </Styled.Row>\n\n <Styled.Row key=\"color\" {...pt?.color?.wrapper}>\n <Styled.Label {...pt?.color?.label}>Color</Styled.Label>\n\n <Styled.PlaceholderWrapper style={{ position: 'relative' }}>\n <Styled.ColorPicker\n className={color ? 'active' : ''}\n style={{ backgroundColor: color || undefined }}\n onClick={() => colorPickerRef.current?.click()}\n >\n {!color ? 'Pick a color...' : ''}\n <input\n type=\"color\"\n ref={colorPickerRef}\n value={color || '#000000'}\n {...pt?.color?.input}\n className={clsx(pt?.color?.input?.className)}\n onChange={(event) => {\n onChange && onChange(['color'], [event?.target.value.toString()])\n onCommit && onCommit(['color'], [event?.target.value.toString()])\n }}\n />\n </Styled.ColorPicker>\n {color && (\n <Styled.Button\n icon=\"close\"\n variant=\"text\"\n onClick={() => {\n onChange && onChange(['color'], [undefined])\n }}\n />\n )}\n </Styled.PlaceholderWrapper>\n </Styled.Row>\n\n {(showRemoveButton || showDuplicateButton) && (\n <Styled.Row {...pt?.footer} className={clsx('footer', pt?.footer?.className)}>\n {showRemoveButton && (\n <Styled.ActionWrapper>\n <Styled.Button icon=\"close\" variant=\"text\" onClick={onRemove}>\n Remove\n </Styled.Button>\n </Styled.ActionWrapper>\n )}\n {showDuplicateButton && (\n <Styled.ActionWrapper>\n <Styled.Button icon=\"content_copy\" variant=\"text\" onClick={onDuplicate}>\n Duplicate\n </Styled.Button>\n </Styled.ActionWrapper>\n )}\n </Styled.Row>\n )}\n </Styled.EnumItemBody>\n )\n}\n\nexport default EnumEditorItem\n"],"names":["EnumEditorItem","item","onChange","onCommit","onRemove","onDuplicate","showRemoveButton","showDuplicateButton","autoFocus","isExpanded","className","pt","props","label","value","icon","color","isNewAttribute","labelRef","useRef","valueRef","colorPickerRef","iconSelectRef","useEffect","jsxs","Styled.EnumItemBody","clsx","Styled.Row","jsx","Styled.Label","Styled.InputText","event","kebabCase","Styled.PlaceholderWrapper","Styled.Placeholder","Styled.IconSelect","Styled.Button","Styled.ColorPicker","Styled.ActionWrapper"],"mappings":"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"}
|
|
@@ -1,156 +1,177 @@
|
|
|
1
|
-
import { j as
|
|
2
|
-
import { useRef as
|
|
3
|
-
import { kebabCase as
|
|
4
|
-
import { EnumItemBody as
|
|
5
|
-
import
|
|
6
|
-
const
|
|
7
|
-
item:
|
|
8
|
-
onChange:
|
|
1
|
+
import { j as l } from "../../../../_virtual/jsx-runtime.es.js";
|
|
2
|
+
import { useRef as d, useEffect as g } from "react";
|
|
3
|
+
import { kebabCase as f } from "lodash";
|
|
4
|
+
import { EnumItemBody as L, Row as n, Label as j, InputText as E, PlaceholderWrapper as R, Placeholder as T, IconSelect as W, Button as p, ColorPicker as _, ActionWrapper as A } from "./EnumEditor.styled.es.js";
|
|
5
|
+
import s from "clsx";
|
|
6
|
+
const J = ({
|
|
7
|
+
item: i,
|
|
8
|
+
onChange: c,
|
|
9
|
+
onCommit: a,
|
|
9
10
|
onRemove: P,
|
|
10
|
-
onDuplicate:
|
|
11
|
-
showRemoveButton:
|
|
12
|
-
showDuplicateButton:
|
|
13
|
-
autoFocus:
|
|
14
|
-
isExpanded:
|
|
15
|
-
className:
|
|
16
|
-
pt:
|
|
17
|
-
...
|
|
11
|
+
onDuplicate: I,
|
|
12
|
+
showRemoveButton: k = !0,
|
|
13
|
+
showDuplicateButton: y = !0,
|
|
14
|
+
autoFocus: t = !1,
|
|
15
|
+
isExpanded: v = !0,
|
|
16
|
+
className: S,
|
|
17
|
+
pt: r,
|
|
18
|
+
...B
|
|
18
19
|
}) => {
|
|
19
|
-
const { label:
|
|
20
|
-
return
|
|
21
|
-
(
|
|
22
|
-
}, [
|
|
23
|
-
|
|
24
|
-
}, [
|
|
25
|
-
|
|
20
|
+
const { label: D, value: K, icon: u, color: o, isNewAttribute: x } = i, N = d(null), b = d(null), h = d(null), w = d(null);
|
|
21
|
+
return g(() => {
|
|
22
|
+
(t || i.isNewAttribute) && N.current?.select();
|
|
23
|
+
}, [t, i.isNewAttribute]), g(() => {
|
|
24
|
+
v && !t && !i.isNewAttribute && setTimeout(() => N.current?.focus(), 250);
|
|
25
|
+
}, [v, t, i.isNewAttribute]), /* @__PURE__ */ l.jsxs(
|
|
26
|
+
L,
|
|
26
27
|
{
|
|
27
|
-
...
|
|
28
|
-
...
|
|
29
|
-
className:
|
|
30
|
-
expanded:
|
|
31
|
-
collapsed: !
|
|
28
|
+
...r?.wrapper,
|
|
29
|
+
...B,
|
|
30
|
+
className: s(S, r?.wrapper?.className, {
|
|
31
|
+
expanded: v,
|
|
32
|
+
collapsed: !v
|
|
32
33
|
}),
|
|
33
34
|
children: [
|
|
34
|
-
/* @__PURE__ */
|
|
35
|
-
/* @__PURE__ */
|
|
36
|
-
/* @__PURE__ */
|
|
37
|
-
|
|
35
|
+
/* @__PURE__ */ l.jsxs(n, { ...r?.label?.wrapper, children: [
|
|
36
|
+
/* @__PURE__ */ l.jsx(j, { ...r?.label?.label, children: "Label" }),
|
|
37
|
+
/* @__PURE__ */ l.jsx(
|
|
38
|
+
E,
|
|
38
39
|
{
|
|
39
|
-
ref:
|
|
40
|
-
value:
|
|
41
|
-
autoFocus:
|
|
42
|
-
...
|
|
43
|
-
className:
|
|
44
|
-
onChange: (
|
|
45
|
-
if (!
|
|
46
|
-
return
|
|
47
|
-
|
|
40
|
+
ref: N,
|
|
41
|
+
value: D,
|
|
42
|
+
autoFocus: t || x,
|
|
43
|
+
...r?.label?.input,
|
|
44
|
+
className: s(r?.label?.input?.className),
|
|
45
|
+
onChange: (e) => {
|
|
46
|
+
if (!x)
|
|
47
|
+
return c && c(["label"], [e.target.value]);
|
|
48
|
+
b.current && (b.current.value = f(e.target.value)), c && c(["label", "value"], [e.target.value, f(e.target.value)]);
|
|
49
|
+
},
|
|
50
|
+
onBlur: (e) => {
|
|
51
|
+
x ? a && a(["label", "value"], [e.target.value, f(e.target.value)]) : a && a(["label"], [e.target.value]);
|
|
52
|
+
},
|
|
53
|
+
onKeyDown: (e) => {
|
|
54
|
+
e.key === "Enter" && (x ? a && a(
|
|
55
|
+
["label", "value"],
|
|
56
|
+
[
|
|
57
|
+
e.target.value,
|
|
58
|
+
f(e.target.value)
|
|
59
|
+
]
|
|
60
|
+
) : a && a(["label"], [e.target.value]));
|
|
48
61
|
},
|
|
49
62
|
placeholder: "Enter label"
|
|
50
63
|
}
|
|
51
64
|
)
|
|
52
65
|
] }, "label"),
|
|
53
|
-
/* @__PURE__ */
|
|
54
|
-
/* @__PURE__ */
|
|
55
|
-
/* @__PURE__ */
|
|
56
|
-
|
|
66
|
+
/* @__PURE__ */ l.jsxs(n, { ...r?.value?.wrapper, children: [
|
|
67
|
+
/* @__PURE__ */ l.jsx(j, { ...r?.value?.label, children: "Value" }),
|
|
68
|
+
/* @__PURE__ */ l.jsx(
|
|
69
|
+
E,
|
|
57
70
|
{
|
|
58
|
-
ref:
|
|
59
|
-
value:
|
|
60
|
-
...
|
|
61
|
-
className:
|
|
62
|
-
onChange: (
|
|
71
|
+
ref: b,
|
|
72
|
+
value: b.current?.value || K,
|
|
73
|
+
...r?.value?.input,
|
|
74
|
+
className: s(r?.value?.input?.className),
|
|
75
|
+
onChange: (e) => c && c(["value"], [e.target.value]),
|
|
76
|
+
onBlur: (e) => a && a(["value"], [e.target.value]),
|
|
77
|
+
onKeyDown: (e) => {
|
|
78
|
+
e.key === "Enter" && a && a(["value"], [e.target.value]);
|
|
79
|
+
},
|
|
63
80
|
placeholder: "Enter value"
|
|
64
81
|
}
|
|
65
82
|
)
|
|
66
83
|
] }, "value"),
|
|
67
|
-
/* @__PURE__ */
|
|
68
|
-
/* @__PURE__ */
|
|
69
|
-
/* @__PURE__ */
|
|
70
|
-
/* @__PURE__ */
|
|
71
|
-
|
|
84
|
+
/* @__PURE__ */ l.jsxs(n, { ...r?.icon?.wrapper, children: [
|
|
85
|
+
/* @__PURE__ */ l.jsx(j, { ...r?.icon?.label, children: "Icon" }),
|
|
86
|
+
/* @__PURE__ */ l.jsxs(R, { style: { position: "relative" }, children: [
|
|
87
|
+
/* @__PURE__ */ l.jsx(
|
|
88
|
+
T,
|
|
72
89
|
{
|
|
73
|
-
style: { display:
|
|
90
|
+
style: { display: u ? "none" : "flex" },
|
|
74
91
|
onClick: () => {
|
|
75
|
-
|
|
92
|
+
w.current?.open();
|
|
76
93
|
},
|
|
77
94
|
children: "Pick an icon..."
|
|
78
95
|
}
|
|
79
96
|
),
|
|
80
|
-
/* @__PURE__ */
|
|
81
|
-
|
|
97
|
+
/* @__PURE__ */ l.jsx(
|
|
98
|
+
W,
|
|
82
99
|
{
|
|
83
|
-
ref:
|
|
84
|
-
value: [
|
|
100
|
+
ref: w,
|
|
101
|
+
value: [u || "question_mark"],
|
|
85
102
|
widthExpand: !0,
|
|
86
|
-
...
|
|
87
|
-
className:
|
|
103
|
+
...r?.icon?.input,
|
|
104
|
+
className: s(r?.icon?.input?.className),
|
|
88
105
|
style: {
|
|
89
|
-
position:
|
|
90
|
-
visibility:
|
|
91
|
-
...
|
|
106
|
+
position: u ? "relative" : "absolute",
|
|
107
|
+
visibility: u ? "visible" : "hidden",
|
|
108
|
+
...r?.icon?.input?.style
|
|
92
109
|
},
|
|
93
|
-
onChange: (
|
|
110
|
+
onChange: (e) => {
|
|
111
|
+
c && c(["icon"], [e[0]]), a && a(["icon"], [e[0]]);
|
|
112
|
+
}
|
|
94
113
|
}
|
|
95
114
|
),
|
|
96
|
-
|
|
97
|
-
|
|
115
|
+
u && /* @__PURE__ */ l.jsx(
|
|
116
|
+
p,
|
|
98
117
|
{
|
|
99
118
|
icon: "close",
|
|
100
119
|
variant: "text",
|
|
101
120
|
onClick: () => {
|
|
102
|
-
|
|
121
|
+
c && c(["icon"], [void 0]);
|
|
103
122
|
}
|
|
104
123
|
}
|
|
105
124
|
)
|
|
106
125
|
] })
|
|
107
126
|
] }, "icon"),
|
|
108
|
-
/* @__PURE__ */
|
|
109
|
-
/* @__PURE__ */
|
|
110
|
-
/* @__PURE__ */
|
|
111
|
-
/* @__PURE__ */
|
|
112
|
-
|
|
127
|
+
/* @__PURE__ */ l.jsxs(n, { ...r?.color?.wrapper, children: [
|
|
128
|
+
/* @__PURE__ */ l.jsx(j, { ...r?.color?.label, children: "Color" }),
|
|
129
|
+
/* @__PURE__ */ l.jsxs(R, { style: { position: "relative" }, children: [
|
|
130
|
+
/* @__PURE__ */ l.jsxs(
|
|
131
|
+
_,
|
|
113
132
|
{
|
|
114
|
-
className:
|
|
115
|
-
style: { backgroundColor:
|
|
116
|
-
onClick: () =>
|
|
133
|
+
className: o ? "active" : "",
|
|
134
|
+
style: { backgroundColor: o || void 0 },
|
|
135
|
+
onClick: () => h.current?.click(),
|
|
117
136
|
children: [
|
|
118
|
-
|
|
119
|
-
/* @__PURE__ */
|
|
137
|
+
o ? "" : "Pick a color...",
|
|
138
|
+
/* @__PURE__ */ l.jsx(
|
|
120
139
|
"input",
|
|
121
140
|
{
|
|
122
141
|
type: "color",
|
|
123
|
-
ref:
|
|
124
|
-
value:
|
|
125
|
-
...
|
|
126
|
-
className:
|
|
127
|
-
onChange: (
|
|
142
|
+
ref: h,
|
|
143
|
+
value: o || "#000000",
|
|
144
|
+
...r?.color?.input,
|
|
145
|
+
className: s(r?.color?.input?.className),
|
|
146
|
+
onChange: (e) => {
|
|
147
|
+
c && c(["color"], [e?.target.value.toString()]), a && a(["color"], [e?.target.value.toString()]);
|
|
148
|
+
}
|
|
128
149
|
}
|
|
129
150
|
)
|
|
130
151
|
]
|
|
131
152
|
}
|
|
132
153
|
),
|
|
133
|
-
|
|
134
|
-
|
|
154
|
+
o && /* @__PURE__ */ l.jsx(
|
|
155
|
+
p,
|
|
135
156
|
{
|
|
136
157
|
icon: "close",
|
|
137
158
|
variant: "text",
|
|
138
159
|
onClick: () => {
|
|
139
|
-
|
|
160
|
+
c && c(["color"], [void 0]);
|
|
140
161
|
}
|
|
141
162
|
}
|
|
142
163
|
)
|
|
143
164
|
] })
|
|
144
165
|
] }, "color"),
|
|
145
|
-
(
|
|
146
|
-
|
|
147
|
-
|
|
166
|
+
(k || y) && /* @__PURE__ */ l.jsxs(n, { ...r?.footer, className: s("footer", r?.footer?.className), children: [
|
|
167
|
+
k && /* @__PURE__ */ l.jsx(A, { children: /* @__PURE__ */ l.jsx(p, { icon: "close", variant: "text", onClick: P, children: "Remove" }) }),
|
|
168
|
+
y && /* @__PURE__ */ l.jsx(A, { children: /* @__PURE__ */ l.jsx(p, { icon: "content_copy", variant: "text", onClick: I, children: "Duplicate" }) })
|
|
148
169
|
] })
|
|
149
170
|
]
|
|
150
171
|
}
|
|
151
172
|
);
|
|
152
173
|
};
|
|
153
174
|
export {
|
|
154
|
-
|
|
175
|
+
J as default
|
|
155
176
|
};
|
|
156
177
|
//# sourceMappingURL=EnumEditorItem.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnumEditorItem.es.js","sources":["../../../../../src/components/EnumEditor/EnumEditorItem.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport { kebabCase } from 'lodash'\n\nimport { DropdownRef, Icon } from '@ynput/ayon-react-components'\n\nimport * as Styled from './EnumEditor.styled'\nimport { AttributeData } from './EnumEditor'\nimport clsx from 'clsx'\n\ntype DivPt = Partial<React.HTMLAttributes<HTMLDivElement>>\n\ntype TextInputPt = Partial<React.ComponentProps<typeof Styled.InputText>>\ntype IconInputPt = Partial<React.ComponentProps<typeof Styled.IconSelect>>\ntype ColorInputPt = Partial<React.InputHTMLAttributes<HTMLInputElement>>\n\nexport interface EnumEditorFieldPt<TInput> {\n wrapper?: DivPt\n label?: DivPt\n input?: Partial<TInput>\n}\n\nexport interface EnumEditorItemPt {\n wrapper?: DivPt\n label?: EnumEditorFieldPt<TextInputPt>\n value?: EnumEditorFieldPt<TextInputPt>\n icon?: EnumEditorFieldPt<IconInputPt>\n color?: EnumEditorFieldPt<ColorInputPt>\n footer?: DivPt\n}\n\nexport interface EnumEditorItemProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n item: AttributeData\n onChange?: (attr: (keyof AttributeData)[], value: (boolean | string | undefined)[]) => void\n onRemove?: () => void\n onDuplicate?: () => void\n showRemoveButton?: boolean\n showDuplicateButton?: boolean\n autoFocus?: boolean\n isExpanded?: boolean\n pt?: EnumEditorItemPt\n}\n\nconst EnumEditorItem = ({\n item,\n onChange,\n onRemove,\n onDuplicate,\n showRemoveButton = true,\n showDuplicateButton = true,\n autoFocus = false,\n isExpanded = true,\n className,\n pt,\n ...props\n}: EnumEditorItemProps) => {\n const { label, value, icon, color, isNewAttribute } = item\n const labelRef = useRef<HTMLInputElement>(null)\n const valueRef = useRef<HTMLInputElement>(null)\n const colorPickerRef = useRef<HTMLInputElement>(null)\n const iconSelectRef = useRef<DropdownRef>(null)\n\n useEffect(() => {\n if (autoFocus || item.isNewAttribute) {\n labelRef.current?.select()\n }\n }, [autoFocus, item.isNewAttribute])\n\n // Handle focus when item becomes expanded\n useEffect(() => {\n if (isExpanded && !autoFocus && !item.isNewAttribute) {\n // Avoids jittery expand animation\n setTimeout(() => labelRef.current?.focus(), 250)\n }\n }, [isExpanded, autoFocus, item.isNewAttribute])\n\n return (\n <Styled.EnumItemBody\n {...pt?.wrapper}\n {...props}\n className={clsx(className, pt?.wrapper?.className, {\n expanded: isExpanded,\n collapsed: !isExpanded,\n })}\n >\n <Styled.Row key=\"label\" {...pt?.label?.wrapper}>\n <Styled.Label {...pt?.label?.label}>Label</Styled.Label>\n <Styled.InputText\n ref={labelRef}\n value={label}\n autoFocus={autoFocus || isNewAttribute}\n {...pt?.label?.input}\n className={clsx(pt?.label?.input?.className)}\n onChange={(event) => {\n if (!isNewAttribute) {\n return onChange && onChange(['label'], [event.target.value])\n }\n if (valueRef.current) {\n valueRef.current.value = kebabCase(event.target.value)\n }\n onChange &&\n onChange(['label', 'value'], [event.target.value, kebabCase(event.target.value)])\n }}\n placeholder=\"Enter label\"\n />\n </Styled.Row>\n\n <Styled.Row key=\"value\" {...pt?.value?.wrapper}>\n <Styled.Label {...pt?.value?.label}>Value</Styled.Label>\n <Styled.InputText\n ref={valueRef}\n value={valueRef.current?.value || value}\n {...pt?.value?.input}\n className={clsx(pt?.value?.input?.className)}\n onChange={(event) => onChange && onChange(['value'], [event.target.value])}\n placeholder=\"Enter value\"\n />\n </Styled.Row>\n\n <Styled.Row key=\"icon\" {...pt?.icon?.wrapper}>\n <Styled.Label {...pt?.icon?.label}>Icon</Styled.Label>\n\n <Styled.PlaceholderWrapper style={{ position: 'relative' }}>\n <Styled.Placeholder\n style={{ display: icon ? 'none' : 'flex' }}\n onClick={() => {\n iconSelectRef.current?.open()\n }}\n >\n Pick an icon...\n </Styled.Placeholder>\n\n <Styled.IconSelect\n ref={iconSelectRef}\n value={[icon || 'question_mark']}\n widthExpand\n {...pt?.icon?.input}\n className={clsx(pt?.icon?.input?.className)}\n style={{\n position: icon ? 'relative' : 'absolute',\n visibility: icon ? 'visible' : 'hidden',\n ...pt?.icon?.input?.style,\n }}\n onChange={(value) => {\n return onChange && onChange(['icon'], [value[0]])\n }}\n />\n {icon && (\n <Styled.Button\n icon=\"close\"\n variant=\"text\"\n onClick={() => {\n onChange && onChange(['icon'], [undefined])\n }}\n />\n )}\n </Styled.PlaceholderWrapper>\n </Styled.Row>\n\n <Styled.Row key=\"color\" {...pt?.color?.wrapper}>\n <Styled.Label {...pt?.color?.label}>Color</Styled.Label>\n\n <Styled.PlaceholderWrapper style={{ position: 'relative' }}>\n <Styled.ColorPicker\n className={color ? 'active' : ''}\n style={{ backgroundColor: color || undefined }}\n onClick={() => colorPickerRef.current?.click()}\n >\n {!color ? 'Pick a color...' : ''}\n <input\n type=\"color\"\n ref={colorPickerRef}\n value={color || '#000000'}\n {...pt?.color?.input}\n className={clsx(pt?.color?.input?.className)}\n onChange={(event) =>\n onChange && onChange(['color'], [event?.target.value.toString()])\n }\n />\n </Styled.ColorPicker>\n {color && (\n <Styled.Button\n icon=\"close\"\n variant=\"text\"\n onClick={() => {\n onChange && onChange(['color'], [undefined])\n }}\n />\n )}\n </Styled.PlaceholderWrapper>\n </Styled.Row>\n\n {(showRemoveButton || showDuplicateButton) && (\n <Styled.Row {...pt?.footer} className={clsx('footer', pt?.footer?.className)}>\n {showRemoveButton && (\n <Styled.ActionWrapper>\n <Styled.Button icon=\"close\" variant=\"text\" onClick={onRemove}>\n Remove\n </Styled.Button>\n </Styled.ActionWrapper>\n )}\n {showDuplicateButton && (\n <Styled.ActionWrapper>\n <Styled.Button icon=\"content_copy\" variant=\"text\" onClick={onDuplicate}>\n Duplicate\n </Styled.Button>\n </Styled.ActionWrapper>\n )}\n </Styled.Row>\n )}\n </Styled.EnumItemBody>\n )\n}\n\nexport default EnumEditorItem\n"],"names":["EnumEditorItem","item","onChange","onRemove","onDuplicate","showRemoveButton","showDuplicateButton","autoFocus","isExpanded","className","pt","props","label","value","icon","color","isNewAttribute","labelRef","useRef","valueRef","colorPickerRef","iconSelectRef","useEffect","jsxs","Styled.EnumItemBody","clsx","Styled.Row","jsx","Styled.Label","Styled.InputText","event","kebabCase","Styled.PlaceholderWrapper","Styled.Placeholder","Styled.IconSelect","Styled.Button","Styled.ColorPicker","Styled.ActionWrapper"],"mappings":";;;;;AA2CA,MAAMA,IAAiB,CAAC;AAAA,EACtB,MAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,kBAAAC,IAAmB;AAAA,EACnB,qBAAAC,IAAsB;AAAA,EACtB,WAAAC,IAAY;AAAA,EACZ,YAAAC,IAAa;AAAA,EACb,WAAAC;AAAA,EACA,IAAAC;AAAA,EACA,GAAGC;AACL,MAA2B;AACzB,QAAM,EAAE,OAAAC,GAAO,OAAAC,GAAO,MAAAC,GAAM,OAAAC,GAAO,gBAAAC,MAAmBf,GAChDgB,IAAWC,EAAyB,IAAI,GACxCC,IAAWD,EAAyB,IAAI,GACxCE,IAAiBF,EAAyB,IAAI,GAC9CG,IAAgBH,EAAoB,IAAI;AAE9C,SAAAI,EAAU,MAAM;AACd,KAAIf,KAAaN,EAAK,mBACpBgB,EAAS,SAAS,OAAA;AAAA,EAEtB,GAAG,CAACV,GAAWN,EAAK,cAAc,CAAC,GAGnCqB,EAAU,MAAM;AACd,IAAId,KAAc,CAACD,KAAa,CAACN,EAAK,kBAEpC,WAAW,MAAMgB,EAAS,SAAS,MAAA,GAAS,GAAG;AAAA,EAEnD,GAAG,CAACT,GAAYD,GAAWN,EAAK,cAAc,CAAC,GAG7CsB,gBAAAA,EAAAA;AAAAA,IAACC;AAAAA,IAAA;AAAA,MACE,GAAGd,GAAI;AAAA,MACP,GAAGC;AAAA,MACJ,WAAWc,EAAKhB,GAAWC,GAAI,SAAS,WAAW;AAAA,QACjD,UAAUF;AAAA,QACV,WAAW,CAACA;AAAA,MAAA,CACb;AAAA,MAED,UAAA;AAAA,QAAAe,gBAAAA,EAAAA,KAACG,GAAA,EAAwB,GAAGhB,GAAI,OAAO,SACrC,UAAA;AAAA,UAAAiB,gBAAAA,MAACC,GAAA,EAAc,GAAGlB,GAAI,OAAO,OAAO,UAAA,SAAK;AAAA,UACzCiB,gBAAAA,EAAAA;AAAAA,YAACE;AAAAA,YAAA;AAAA,cACC,KAAKZ;AAAA,cACL,OAAOL;AAAA,cACP,WAAWL,KAAaS;AAAA,cACvB,GAAGN,GAAI,OAAO;AAAA,cACf,WAAWe,EAAKf,GAAI,OAAO,OAAO,SAAS;AAAA,cAC3C,UAAU,CAACoB,MAAU;AACnB,oBAAI,CAACd;AACH,yBAAOd,KAAYA,EAAS,CAAC,OAAO,GAAG,CAAC4B,EAAM,OAAO,KAAK,CAAC;AAE7D,gBAAIX,EAAS,YACXA,EAAS,QAAQ,QAAQY,EAAUD,EAAM,OAAO,KAAK,IAEvD5B,KACEA,EAAS,CAAC,SAAS,OAAO,GAAG,CAAC4B,EAAM,OAAO,OAAOC,EAAUD,EAAM,OAAO,KAAK,CAAC,CAAC;AAAA,cACpF;AAAA,cACA,aAAY;AAAA,YAAA;AAAA,UAAA;AAAA,QACd,EAAA,GAnBc,OAoBhB;AAAA,+BAECJ,GAAA,EAAwB,GAAGhB,GAAI,OAAO,SACrC,UAAA;AAAA,UAAAiB,gBAAAA,MAACC,GAAA,EAAc,GAAGlB,GAAI,OAAO,OAAO,UAAA,SAAK;AAAA,UACzCiB,gBAAAA,EAAAA;AAAAA,YAACE;AAAAA,YAAA;AAAA,cACC,KAAKV;AAAA,cACL,OAAOA,EAAS,SAAS,SAASN;AAAA,cACjC,GAAGH,GAAI,OAAO;AAAA,cACf,WAAWe,EAAKf,GAAI,OAAO,OAAO,SAAS;AAAA,cAC3C,UAAU,CAACoB,MAAU5B,KAAYA,EAAS,CAAC,OAAO,GAAG,CAAC4B,EAAM,OAAO,KAAK,CAAC;AAAA,cACzE,aAAY;AAAA,YAAA;AAAA,UAAA;AAAA,QACd,EAAA,GATc,OAUhB;AAAA,+BAECJ,GAAA,EAAuB,GAAGhB,GAAI,MAAM,SACnC,UAAA;AAAA,UAAAiB,gBAAAA,MAACC,GAAA,EAAc,GAAGlB,GAAI,MAAM,OAAO,UAAA,QAAI;AAAA,UAEvCa,gBAAAA,EAAAA,KAACS,GAAA,EAA0B,OAAO,EAAE,UAAU,cAC5C,UAAA;AAAA,YAAAL,gBAAAA,EAAAA;AAAAA,cAACM;AAAAA,cAAA;AAAA,gBACC,OAAO,EAAE,SAASnB,IAAO,SAAS,OAAA;AAAA,gBAClC,SAAS,MAAM;AACb,kBAAAO,EAAc,SAAS,KAAA;AAAA,gBACzB;AAAA,gBACD,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAIDM,gBAAAA,EAAAA;AAAAA,cAACO;AAAAA,cAAA;AAAA,gBACC,KAAKb;AAAA,gBACL,OAAO,CAACP,KAAQ,eAAe;AAAA,gBAC/B,aAAW;AAAA,gBACV,GAAGJ,GAAI,MAAM;AAAA,gBACd,WAAWe,EAAKf,GAAI,MAAM,OAAO,SAAS;AAAA,gBAC1C,OAAO;AAAA,kBACL,UAAUI,IAAO,aAAa;AAAA,kBAC9B,YAAYA,IAAO,YAAY;AAAA,kBAC/B,GAAGJ,GAAI,MAAM,OAAO;AAAA,gBAAA;AAAA,gBAEtB,UAAU,CAACG,MACFX,KAAYA,EAAS,CAAC,MAAM,GAAG,CAACW,EAAM,CAAC,CAAC,CAAC;AAAA,cAClD;AAAA,YAAA;AAAA,YAEDC,KACCa,gBAAAA,EAAAA;AAAAA,cAACQ;AAAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,SAAS,MAAM;AACb,kBAAAjC,KAAYA,EAAS,CAAC,MAAM,GAAG,CAAC,MAAS,CAAC;AAAA,gBAC5C;AAAA,cAAA;AAAA,YAAA;AAAA,UACF,EAAA,CAEJ;AAAA,QAAA,EAAA,GArCc,MAsChB;AAAA,+BAECwB,GAAA,EAAwB,GAAGhB,GAAI,OAAO,SACrC,UAAA;AAAA,UAAAiB,gBAAAA,MAACC,GAAA,EAAc,GAAGlB,GAAI,OAAO,OAAO,UAAA,SAAK;AAAA,UAEzCa,gBAAAA,EAAAA,KAACS,GAAA,EAA0B,OAAO,EAAE,UAAU,cAC5C,UAAA;AAAA,YAAAT,gBAAAA,EAAAA;AAAAA,cAACa;AAAAA,cAAA;AAAA,gBACC,WAAWrB,IAAQ,WAAW;AAAA,gBAC9B,OAAO,EAAE,iBAAiBA,KAAS,OAAA;AAAA,gBACnC,SAAS,MAAMK,EAAe,SAAS,MAAA;AAAA,gBAEtC,UAAA;AAAA,kBAACL,IAA4B,KAApB;AAAA,kBACVY,gBAAAA,EAAAA;AAAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,KAAKP;AAAA,sBACL,OAAOL,KAAS;AAAA,sBACf,GAAGL,GAAI,OAAO;AAAA,sBACf,WAAWe,EAAKf,GAAI,OAAO,OAAO,SAAS;AAAA,sBAC3C,UAAU,CAACoB,MACT5B,KAAYA,EAAS,CAAC,OAAO,GAAG,CAAC4B,GAAO,OAAO,MAAM,SAAA,CAAU,CAAC;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAEpE;AAAA,cAAA;AAAA,YAAA;AAAA,YAEDf,KACCY,gBAAAA,EAAAA;AAAAA,cAACQ;AAAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,SAAS,MAAM;AACb,kBAAAjC,KAAYA,EAAS,CAAC,OAAO,GAAG,CAAC,MAAS,CAAC;AAAA,gBAC7C;AAAA,cAAA;AAAA,YAAA;AAAA,UACF,EAAA,CAEJ;AAAA,QAAA,EAAA,GA9Bc,OA+BhB;AAAA,SAEEG,KAAoBC,MACpBiB,gBAAAA,EAAAA,KAACG,GAAA,EAAY,GAAGhB,GAAI,QAAQ,WAAWe,EAAK,UAAUf,GAAI,QAAQ,SAAS,GACxE,UAAA;AAAA,UAAAL,KACCsB,gBAAAA,EAAAA,IAACU,GAAA,EACC,gCAACF,GAAA,EAAc,MAAK,SAAQ,SAAQ,QAAO,SAAShC,GAAU,oBAE9D,GACF;AAAA,UAEDG,KACCqB,gBAAAA,EAAAA,IAACU,GAAA,EACC,gCAACF,GAAA,EAAc,MAAK,gBAAe,SAAQ,QAAO,SAAS/B,GAAa,uBAExE,EAAA,CACF;AAAA,QAAA,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;"}
|
|
1
|
+
{"version":3,"file":"EnumEditorItem.es.js","sources":["../../../../../src/components/EnumEditor/EnumEditorItem.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport { kebabCase } from 'lodash'\n\nimport { DropdownRef, Icon } from '@ynput/ayon-react-components'\n\nimport * as Styled from './EnumEditor.styled'\nimport { AttributeData } from './EnumEditor'\nimport clsx from 'clsx'\n\ntype DivPt = Partial<React.HTMLAttributes<HTMLDivElement>>\n\ntype TextInputPt = Partial<React.ComponentProps<typeof Styled.InputText>>\ntype IconInputPt = Partial<React.ComponentProps<typeof Styled.IconSelect>>\ntype ColorInputPt = Partial<React.InputHTMLAttributes<HTMLInputElement>>\n\nexport interface EnumEditorFieldPt<TInput> {\n wrapper?: DivPt\n label?: DivPt\n input?: Partial<TInput>\n}\n\nexport interface EnumEditorItemPt {\n wrapper?: DivPt\n label?: EnumEditorFieldPt<TextInputPt>\n value?: EnumEditorFieldPt<TextInputPt>\n icon?: EnumEditorFieldPt<IconInputPt>\n color?: EnumEditorFieldPt<ColorInputPt>\n footer?: DivPt\n}\n\nexport interface EnumEditorItemProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n item: AttributeData\n onChange?: (attr: (keyof AttributeData)[], value: (boolean | string | undefined)[]) => void\n onCommit?: (attr: (keyof AttributeData)[], value: (boolean | string | undefined)[]) => void\n onRemove?: () => void\n onDuplicate?: () => void\n showRemoveButton?: boolean\n showDuplicateButton?: boolean\n autoFocus?: boolean\n isExpanded?: boolean\n pt?: EnumEditorItemPt\n}\n\nconst EnumEditorItem = ({\n item,\n onChange,\n onCommit,\n onRemove,\n onDuplicate,\n showRemoveButton = true,\n showDuplicateButton = true,\n autoFocus = false,\n isExpanded = true,\n className,\n pt,\n ...props\n}: EnumEditorItemProps) => {\n const { label, value, icon, color, isNewAttribute } = item\n const labelRef = useRef<HTMLInputElement>(null)\n const valueRef = useRef<HTMLInputElement>(null)\n const colorPickerRef = useRef<HTMLInputElement>(null)\n const iconSelectRef = useRef<DropdownRef>(null)\n\n useEffect(() => {\n if (autoFocus || item.isNewAttribute) {\n labelRef.current?.select()\n }\n }, [autoFocus, item.isNewAttribute])\n\n // Handle focus when item becomes expanded\n useEffect(() => {\n if (isExpanded && !autoFocus && !item.isNewAttribute) {\n // Avoids jittery expand animation\n setTimeout(() => labelRef.current?.focus(), 250)\n }\n }, [isExpanded, autoFocus, item.isNewAttribute])\n\n return (\n <Styled.EnumItemBody\n {...pt?.wrapper}\n {...props}\n className={clsx(className, pt?.wrapper?.className, {\n expanded: isExpanded,\n collapsed: !isExpanded,\n })}\n >\n <Styled.Row key=\"label\" {...pt?.label?.wrapper}>\n <Styled.Label {...pt?.label?.label}>Label</Styled.Label>\n <Styled.InputText\n ref={labelRef}\n value={label}\n autoFocus={autoFocus || isNewAttribute}\n {...pt?.label?.input}\n className={clsx(pt?.label?.input?.className)}\n onChange={(event) => {\n if (!isNewAttribute) {\n return onChange && onChange(['label'], [event.target.value])\n }\n if (valueRef.current) {\n valueRef.current.value = kebabCase(event.target.value)\n }\n onChange &&\n onChange(['label', 'value'], [event.target.value, kebabCase(event.target.value)])\n }}\n onBlur={(event) => {\n if (!isNewAttribute) {\n onCommit && onCommit(['label'], [event.target.value])\n } else {\n onCommit &&\n onCommit(['label', 'value'], [event.target.value, kebabCase(event.target.value)])\n }\n }}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n if (!isNewAttribute) {\n onCommit && onCommit(['label'], [(event.target as HTMLInputElement).value])\n } else {\n onCommit &&\n onCommit(\n ['label', 'value'],\n [\n (event.target as HTMLInputElement).value,\n kebabCase((event.target as HTMLInputElement).value),\n ],\n )\n }\n }\n }}\n placeholder=\"Enter label\"\n />\n </Styled.Row>\n\n <Styled.Row key=\"value\" {...pt?.value?.wrapper}>\n <Styled.Label {...pt?.value?.label}>Value</Styled.Label>\n <Styled.InputText\n ref={valueRef}\n value={valueRef.current?.value || value}\n {...pt?.value?.input}\n className={clsx(pt?.value?.input?.className)}\n onChange={(event) => onChange && onChange(['value'], [event.target.value])}\n onBlur={(event) => onCommit && onCommit(['value'], [event.target.value])}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n onCommit && onCommit(['value'], [(event.target as HTMLInputElement).value])\n }\n }}\n placeholder=\"Enter value\"\n />\n </Styled.Row>\n\n <Styled.Row key=\"icon\" {...pt?.icon?.wrapper}>\n <Styled.Label {...pt?.icon?.label}>Icon</Styled.Label>\n\n <Styled.PlaceholderWrapper style={{ position: 'relative' }}>\n <Styled.Placeholder\n style={{ display: icon ? 'none' : 'flex' }}\n onClick={() => {\n iconSelectRef.current?.open()\n }}\n >\n Pick an icon...\n </Styled.Placeholder>\n\n <Styled.IconSelect\n ref={iconSelectRef}\n value={[icon || 'question_mark']}\n widthExpand\n {...pt?.icon?.input}\n className={clsx(pt?.icon?.input?.className)}\n style={{\n position: icon ? 'relative' : 'absolute',\n visibility: icon ? 'visible' : 'hidden',\n ...pt?.icon?.input?.style,\n }}\n onChange={(value) => {\n onChange && onChange(['icon'], [value[0]])\n onCommit && onCommit(['icon'], [value[0]])\n }}\n />\n {icon && (\n <Styled.Button\n icon=\"close\"\n variant=\"text\"\n onClick={() => {\n onChange && onChange(['icon'], [undefined])\n }}\n />\n )}\n </Styled.PlaceholderWrapper>\n </Styled.Row>\n\n <Styled.Row key=\"color\" {...pt?.color?.wrapper}>\n <Styled.Label {...pt?.color?.label}>Color</Styled.Label>\n\n <Styled.PlaceholderWrapper style={{ position: 'relative' }}>\n <Styled.ColorPicker\n className={color ? 'active' : ''}\n style={{ backgroundColor: color || undefined }}\n onClick={() => colorPickerRef.current?.click()}\n >\n {!color ? 'Pick a color...' : ''}\n <input\n type=\"color\"\n ref={colorPickerRef}\n value={color || '#000000'}\n {...pt?.color?.input}\n className={clsx(pt?.color?.input?.className)}\n onChange={(event) => {\n onChange && onChange(['color'], [event?.target.value.toString()])\n onCommit && onCommit(['color'], [event?.target.value.toString()])\n }}\n />\n </Styled.ColorPicker>\n {color && (\n <Styled.Button\n icon=\"close\"\n variant=\"text\"\n onClick={() => {\n onChange && onChange(['color'], [undefined])\n }}\n />\n )}\n </Styled.PlaceholderWrapper>\n </Styled.Row>\n\n {(showRemoveButton || showDuplicateButton) && (\n <Styled.Row {...pt?.footer} className={clsx('footer', pt?.footer?.className)}>\n {showRemoveButton && (\n <Styled.ActionWrapper>\n <Styled.Button icon=\"close\" variant=\"text\" onClick={onRemove}>\n Remove\n </Styled.Button>\n </Styled.ActionWrapper>\n )}\n {showDuplicateButton && (\n <Styled.ActionWrapper>\n <Styled.Button icon=\"content_copy\" variant=\"text\" onClick={onDuplicate}>\n Duplicate\n </Styled.Button>\n </Styled.ActionWrapper>\n )}\n </Styled.Row>\n )}\n </Styled.EnumItemBody>\n )\n}\n\nexport default EnumEditorItem\n"],"names":["EnumEditorItem","item","onChange","onCommit","onRemove","onDuplicate","showRemoveButton","showDuplicateButton","autoFocus","isExpanded","className","pt","props","label","value","icon","color","isNewAttribute","labelRef","useRef","valueRef","colorPickerRef","iconSelectRef","useEffect","jsxs","Styled.EnumItemBody","clsx","Styled.Row","jsx","Styled.Label","Styled.InputText","event","kebabCase","Styled.PlaceholderWrapper","Styled.Placeholder","Styled.IconSelect","Styled.Button","Styled.ColorPicker","Styled.ActionWrapper"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const
|
|
1
|
+
"use strict";const m=require("lodash"),r=require("react"),q=({creator:f,initialData:u,onChange:p,onCommit:a,normalizer:o,mergeIncomingData:I})=>{const[t,h]=r.useState(u),i=e=>{h(e);const c=o(t),s=o(e);m.isEqual(c,s)||p(s)};return r.useEffect(()=>{h(e=>{const c=o(e),s=o(u);return m.isEqual(c,s)?e:I?I(e,u):u})},[u,I,o]),{items:t,handleAddItem:e=>{i([...t,{...f(),...e,id:m.uniqueId()}])},handleRemoveItem:e=>()=>{i([...t.slice(0,e),...t.slice(e+1)])},handleChangeItem:e=>(c,s)=>{let d={...t[e]};c.map((n,l)=>d[n]=s[l]),i([...t.slice(0,e),d,...t.slice(e+1)])},handleCommitItem:e=>(c,s)=>{if(!a)return;let d={...t[e]};c.map((l,v)=>d[l]=s[v]);const n=[...t.slice(0,e),d,...t.slice(e+1)];a(o(n))},handleDuplicateItem:(e,c)=>{i([...t.slice(0,e+1),{...t[e],id:m.uniqueId(),...c},...t.slice(e+1)])},handleDraggableEnd:e=>{if(!e.over)return;const c=t.find(l=>l.id==e.active.id),s=t.indexOf(c),d=t.find(l=>l.id==e.over.id),n=t.indexOf(d);s<n?i([...t.slice(0,s),...t.slice(s+1,n+1),c,...t.slice(n+1)]):i([...t.slice(0,n),c,...t.slice(n,s),...t.slice(s+1)])}}};module.exports=q;
|
|
2
2
|
//# sourceMappingURL=useDraggable.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDraggable.cjs.js","sources":["../../../../../../src/components/EnumEditor/hooks/useDraggable.ts"],"sourcesContent":["import { DragEndEvent } from '@dnd-kit/core'\nimport { isEqual } from 'lodash'\nimport { uniqueId } from 'lodash'\nimport { useEffect, useState } from 'react'\n\nconst useDraggable = <T extends { id: string }, U>({\n creator,\n initialData,\n onChange,\n normalizer,\n mergeIncomingData,\n}: {\n creator: () => T\n initialData: T[]\n onChange: (data: U[]) => void\n normalizer: (data: T[]) => U[]\n mergeIncomingData?: (currentData: T[], incomingData: T[]) => T[]\n}) => {\n const [items, setItems] = useState<T[]>(initialData)\n\n const updateAndSync = (data: T[]) => {\n setItems(data)\n\n const currentNormalized = normalizer(items)\n const nextNormalized = normalizer(data)\n\n if (!isEqual(currentNormalized, nextNormalized)) {\n onChange(nextNormalized)\n }\n }\n\n useEffect(() => {\n setItems((currentItems) => {\n const currentNormalized = normalizer(currentItems)\n const incomingNormalized = normalizer(initialData)\n\n if (isEqual(currentNormalized, incomingNormalized)) {\n return currentItems\n }\n\n return mergeIncomingData ? mergeIncomingData(currentItems, initialData) : initialData\n })\n }, [initialData, mergeIncomingData, normalizer])\n\n const handleAddItem = (overrides: Partial<T>) => {\n updateAndSync([...items, { ...creator(), ...overrides, id: uniqueId() }])\n }\n\n const handleRemoveItem = (idx: number) => () => {\n updateAndSync([...items.slice(0, idx), ...items.slice(idx + 1)])\n }\n\n const handleChangeItem =\n (idx: number) => (attrs: (keyof T)[], values: (boolean | string | undefined)[]) => {\n let updatedItem: T = { ...items[idx] }\n //@ts-ignore\n attrs.map((attr, index) => (updatedItem[attr] = values[index]))\n updateAndSync([...items.slice(0, idx), updatedItem, ...items.slice(idx + 1)])\n }\n\n const handleDuplicateItem = (idx: number, overrides: Partial<T>) => {\n updateAndSync([\n ...items.slice(0, idx + 1),\n { ...items[idx], id: uniqueId(), ...overrides },\n ...items.slice(idx + 1),\n ])\n }\n\n const handleDraggableEnd = (event: DragEndEvent) => {\n if (!event.over) {\n return\n }\n\n const activeItem = items.find((filterItem) => filterItem.id == event.active.id)\n const activeItemIndex = items.indexOf(activeItem!)\n const overItem = items.find((item) => item.id == event.over!.id)\n const overItemIndex = items.indexOf(overItem!)\n\n if (activeItemIndex < overItemIndex) {\n updateAndSync([\n ...items.slice(0, activeItemIndex),\n ...items.slice(activeItemIndex + 1, overItemIndex + 1),\n activeItem!,\n ...items.slice(overItemIndex + 1),\n ])\n } else {\n updateAndSync([\n ...items.slice(0, overItemIndex),\n activeItem!,\n ...items.slice(overItemIndex, activeItemIndex),\n ...items.slice(activeItemIndex + 1),\n ])\n }\n }\n\n return {\n items,\n handleAddItem,\n handleRemoveItem,\n handleChangeItem,\n handleDuplicateItem,\n handleDraggableEnd,\n }\n}\n\nexport default useDraggable\n"],"names":["useDraggable","creator","initialData","onChange","normalizer","mergeIncomingData","items","setItems","useState","updateAndSync","data","currentNormalized","nextNormalized","isEqual","useEffect","currentItems","incomingNormalized","overrides","uniqueId","idx","attrs","values","updatedItem","attr","index","event","activeItem","filterItem","activeItemIndex","overItem","item","overItemIndex"],"mappings":"0DAKMA,EAAe,CAA8B,CACjD,QAAAC,EACA,YAAAC,EACA,SAAAC,EACA,WAAAC,EACA,kBAAAC,CACF,
|
|
1
|
+
{"version":3,"file":"useDraggable.cjs.js","sources":["../../../../../../src/components/EnumEditor/hooks/useDraggable.ts"],"sourcesContent":["import { DragEndEvent } from '@dnd-kit/core'\nimport { isEqual } from 'lodash'\nimport { uniqueId } from 'lodash'\nimport { useEffect, useState } from 'react'\n\nconst useDraggable = <T extends { id: string }, U>({\n creator,\n initialData,\n onChange,\n onCommit,\n normalizer,\n mergeIncomingData,\n}: {\n creator: () => T\n initialData: T[]\n onChange: (data: U[]) => void\n onCommit?: (data: U[]) => void\n normalizer: (data: T[]) => U[]\n mergeIncomingData?: (currentData: T[], incomingData: T[]) => T[]\n}) => {\n const [items, setItems] = useState<T[]>(initialData)\n\n const updateAndSync = (data: T[]) => {\n setItems(data)\n\n const currentNormalized = normalizer(items)\n const nextNormalized = normalizer(data)\n\n if (!isEqual(currentNormalized, nextNormalized)) {\n onChange(nextNormalized)\n }\n }\n\n useEffect(() => {\n setItems((currentItems) => {\n const currentNormalized = normalizer(currentItems)\n const incomingNormalized = normalizer(initialData)\n\n if (isEqual(currentNormalized, incomingNormalized)) {\n return currentItems\n }\n\n return mergeIncomingData ? mergeIncomingData(currentItems, initialData) : initialData\n })\n }, [initialData, mergeIncomingData, normalizer])\n\n const handleAddItem = (overrides: Partial<T>) => {\n updateAndSync([...items, { ...creator(), ...overrides, id: uniqueId() }])\n }\n\n const handleRemoveItem = (idx: number) => () => {\n updateAndSync([...items.slice(0, idx), ...items.slice(idx + 1)])\n }\n\n const handleChangeItem =\n (idx: number) => (attrs: (keyof T)[], values: (boolean | string | undefined)[]) => {\n let updatedItem: T = { ...items[idx] }\n //@ts-ignore\n attrs.map((attr, index) => (updatedItem[attr] = values[index]))\n updateAndSync([...items.slice(0, idx), updatedItem, ...items.slice(idx + 1)])\n }\n\n const handleCommitItem =\n (idx: number) => (attrs: (keyof T)[], values: (boolean | string | undefined)[]) => {\n if (!onCommit) return\n let updatedItem: T = { ...items[idx] }\n //@ts-ignore\n attrs.map((attr, index) => (updatedItem[attr] = values[index]))\n const nextItems = [...items.slice(0, idx), updatedItem, ...items.slice(idx + 1)]\n onCommit(normalizer(nextItems))\n }\n\n const handleDuplicateItem = (idx: number, overrides: Partial<T>) => {\n updateAndSync([\n ...items.slice(0, idx + 1),\n { ...items[idx], id: uniqueId(), ...overrides },\n ...items.slice(idx + 1),\n ])\n }\n\n const handleDraggableEnd = (event: DragEndEvent) => {\n if (!event.over) {\n return\n }\n\n const activeItem = items.find((filterItem) => filterItem.id == event.active.id)\n const activeItemIndex = items.indexOf(activeItem!)\n const overItem = items.find((item) => item.id == event.over!.id)\n const overItemIndex = items.indexOf(overItem!)\n\n if (activeItemIndex < overItemIndex) {\n updateAndSync([\n ...items.slice(0, activeItemIndex),\n ...items.slice(activeItemIndex + 1, overItemIndex + 1),\n activeItem!,\n ...items.slice(overItemIndex + 1),\n ])\n } else {\n updateAndSync([\n ...items.slice(0, overItemIndex),\n activeItem!,\n ...items.slice(overItemIndex, activeItemIndex),\n ...items.slice(activeItemIndex + 1),\n ])\n }\n }\n\n return {\n items,\n handleAddItem,\n handleRemoveItem,\n handleChangeItem,\n handleCommitItem,\n handleDuplicateItem,\n handleDraggableEnd,\n }\n}\n\nexport default useDraggable\n"],"names":["useDraggable","creator","initialData","onChange","onCommit","normalizer","mergeIncomingData","items","setItems","useState","updateAndSync","data","currentNormalized","nextNormalized","isEqual","useEffect","currentItems","incomingNormalized","overrides","uniqueId","idx","attrs","values","updatedItem","attr","index","nextItems","event","activeItem","filterItem","activeItemIndex","overItem","item","overItemIndex"],"mappings":"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"}
|