@payloadcms/ui 3.79.0-internal.de5df42 → 3.79.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.d.ts.map +1 -1
  2. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js +53 -3
  3. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js.map +1 -1
  4. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js +541 -0
  5. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js.map +1 -0
  6. package/dist/elements/Combobox/index.d.ts.map +1 -1
  7. package/dist/elements/Combobox/index.js +1 -0
  8. package/dist/elements/Combobox/index.js.map +1 -1
  9. package/dist/elements/EditUpload/index.d.ts.map +1 -1
  10. package/dist/elements/EditUpload/index.js +1 -2
  11. package/dist/elements/EditUpload/index.js.map +1 -1
  12. package/dist/elements/Link/index.d.ts.map +1 -1
  13. package/dist/elements/PreviewSizes/index.d.ts.map +1 -1
  14. package/dist/elements/PreviewSizes/index.js +1 -2
  15. package/dist/elements/PreviewSizes/index.js.map +1 -1
  16. package/dist/elements/PublishButton/index.d.ts.map +1 -1
  17. package/dist/elements/PublishButton/index.js +3 -1
  18. package/dist/elements/PublishButton/index.js.map +1 -1
  19. package/dist/elements/ReactSelect/MultiValue/index.d.ts.map +1 -1
  20. package/dist/elements/ReactSelect/MultiValue/index.js +14 -15
  21. package/dist/elements/ReactSelect/MultiValue/index.js.map +1 -1
  22. package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
  23. package/dist/elements/RelationshipTable/index.js +14 -9
  24. package/dist/elements/RelationshipTable/index.js.map +1 -1
  25. package/dist/elements/TimezonePicker/index.js +1 -1
  26. package/dist/elements/TimezonePicker/index.js.map +1 -1
  27. package/dist/elements/Toasts/fieldErrors.d.ts +4 -0
  28. package/dist/elements/Toasts/fieldErrors.d.ts.map +1 -1
  29. package/dist/elements/Toasts/fieldErrors.js +4 -2
  30. package/dist/elements/Toasts/fieldErrors.js.map +1 -1
  31. package/dist/elements/Toasts/fieldErrors.spec.js +46 -0
  32. package/dist/elements/Toasts/fieldErrors.spec.js.map +1 -0
  33. package/dist/elements/WhereBuilder/Condition/Relationship/index.d.ts.map +1 -1
  34. package/dist/elements/WhereBuilder/Condition/Relationship/index.js +8 -6
  35. package/dist/elements/WhereBuilder/Condition/Relationship/index.js.map +1 -1
  36. package/dist/elements/WhereBuilder/field-types.d.ts.map +1 -1
  37. package/dist/elements/WhereBuilder/field-types.js +2 -5
  38. package/dist/elements/WhereBuilder/field-types.js.map +1 -1
  39. package/dist/exports/client/{DatePicker-CL2EGBVQ.js → DatePicker-T2DMDMM5.js} +2 -2
  40. package/dist/exports/client/chunk-WDZJLNNB.js +29 -0
  41. package/dist/exports/client/{chunk-SH42NW5R.js.map → chunk-WDZJLNNB.js.map} +4 -4
  42. package/dist/exports/client/index.js +24 -24
  43. package/dist/exports/client/index.js.map +4 -4
  44. package/dist/fields/Blocks/BlockSelector/index.scss +4 -4
  45. package/dist/fields/Join/index.js +1 -1
  46. package/dist/fields/Join/index.js.map +1 -1
  47. package/dist/forms/Form/mergeServerFormState.d.ts.map +1 -1
  48. package/dist/forms/Form/mergeServerFormState.js +101 -24
  49. package/dist/forms/Form/mergeServerFormState.js.map +1 -1
  50. package/dist/styles.css +1 -1
  51. package/dist/utilities/buildTableState.js +2 -1
  52. package/dist/utilities/buildTableState.js.map +1 -1
  53. package/dist/views/Edit/index.d.ts.map +1 -1
  54. package/dist/views/Edit/index.js +11 -2
  55. package/dist/views/Edit/index.js.map +1 -1
  56. package/package.json +4 -4
  57. package/dist/exports/client/chunk-SH42NW5R.js +0 -29
  58. /package/dist/exports/client/{DatePicker-CL2EGBVQ.js.map → DatePicker-T2DMDMM5.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeFormStateFromClipboard.spec.js","names":["ObjectIdImport","describe","expect","it","mergeFormStateFromClipboard","ObjectId","default","copiedBlockID","toHexString","formState","layout","valid","value","initialValue","rows","clipboardData","type","path","blocks","data","rowIndex","result","dataFromClipboard","toBeDefined","not","toEqual","isValid","toBe","toHaveLength","id","copiedNestedBlockID","duplicate","copiedArrayItemID1","copiedArrayItemID2","copiedArrayItemID3","targetBlockID","ctas","blockType","isLoading","copiedArrayID","items","fields","copiedNestedArrayID","disableSort"],"sources":["../../../src/elements/ClipboardAction/mergeFormStateFromClipboard.spec.ts"],"sourcesContent":["import type { FormState } from 'payload'\n\nimport ObjectIdImport from 'bson-objectid'\nimport { describe, expect, it } from 'vitest'\n\nimport { mergeFormStateFromClipboard } from './mergeFormStateFromClipboard.js'\nimport type { ClipboardPasteData } from './types.js'\n\nconst ObjectId = (\n 'default' in ObjectIdImport ? ObjectIdImport.default : ObjectIdImport\n) as typeof ObjectIdImport\n\ndescribe('mergeFormStateFromClipboard', () => {\n describe('block ID regeneration', () => {\n it('should generate new IDs when pasting blocks to prevent duplicates', () => {\n const copiedBlockID = new ObjectId().toHexString()\n\n const formState: FormState = {\n layout: {\n valid: true,\n value: 0,\n initialValue: 0,\n rows: [],\n },\n }\n\n const clipboardData: ClipboardPasteData = {\n type: 'blocks',\n path: 'layout',\n blocks: [],\n data: {\n 'layout.0.id': {\n value: copiedBlockID,\n valid: true,\n },\n 'layout.0.blockType': {\n value: 'content',\n valid: true,\n },\n 'layout.0.text': {\n value: 'test content',\n valid: true,\n },\n },\n rowIndex: 0,\n }\n\n const result = mergeFormStateFromClipboard({\n dataFromClipboard: clipboardData,\n formState,\n path: 'layout',\n })\n\n // Check that a new ID was generated\n expect(result['layout.0.id']).toBeDefined()\n expect(result['layout.0.id'].value).toBeDefined()\n expect(result['layout.0.id'].value).not.toEqual(copiedBlockID)\n expect(ObjectId.isValid(result['layout.0.id'].value as string)).toBe(true)\n\n // Check that the row metadata also has the new ID\n expect(result.layout.rows).toHaveLength(1)\n expect(result.layout.rows?.[0]?.id).not.toEqual(copiedBlockID)\n expect(result.layout.rows?.[0]?.id).toEqual(result['layout.0.id'].value)\n })\n\n it('should generate new IDs for nested blocks', () => {\n const copiedBlockID = new ObjectId().toHexString()\n const copiedNestedBlockID = new ObjectId().toHexString()\n\n const formState: FormState = {\n layout: {\n valid: true,\n value: 0,\n initialValue: 0,\n rows: [],\n },\n }\n\n const clipboardData: ClipboardPasteData = {\n type: 'blocks',\n path: 'layout',\n blocks: [],\n data: {\n 'layout.0.id': {\n value: copiedBlockID,\n valid: true,\n },\n 'layout.0.blockType': {\n value: 'container',\n valid: true,\n },\n 'layout.0.subBlocks': {\n value: 1,\n valid: true,\n rows: [{ id: copiedNestedBlockID }],\n },\n 'layout.0.subBlocks.0.id': {\n value: copiedNestedBlockID,\n valid: true,\n },\n 'layout.0.subBlocks.0.blockType': {\n value: 'content',\n valid: true,\n },\n },\n rowIndex: 0,\n }\n\n const result = mergeFormStateFromClipboard({\n dataFromClipboard: clipboardData,\n formState,\n path: 'layout',\n })\n\n // Check that parent block got new ID\n expect(result['layout.0.id'].value).not.toEqual(copiedBlockID)\n expect(ObjectId.isValid(result['layout.0.id'].value as string)).toBe(true)\n\n // Check that nested block got new ID\n expect(result['layout.0.subBlocks.0.id'].value).not.toEqual(copiedNestedBlockID)\n expect(ObjectId.isValid(result['layout.0.subBlocks.0.id'].value as string)).toBe(true)\n\n // Check that parent and nested IDs are different\n expect(result['layout.0.id'].value).not.toEqual(result['layout.0.subBlocks.0.id'].value)\n\n // Check that parent row metadata has new ID\n expect(result.layout.rows?.[0]?.id).toEqual(result['layout.0.id'].value)\n\n // Check that nested row metadata has new ID\n expect(result['layout.0.subBlocks'].rows?.[0]?.id).toEqual(\n result['layout.0.subBlocks.0.id'].value,\n )\n })\n\n it('should preserve non-ID field values when pasting', () => {\n const copiedBlockID = new ObjectId().toHexString()\n\n const formState: FormState = {\n layout: {\n valid: true,\n value: 0,\n initialValue: 0,\n rows: [],\n },\n }\n\n const clipboardData: ClipboardPasteData = {\n type: 'blocks',\n path: 'layout',\n blocks: [],\n data: {\n 'layout.0.id': {\n value: copiedBlockID,\n valid: true,\n },\n 'layout.0.blockType': {\n value: 'content',\n valid: true,\n },\n 'layout.0.text': {\n value: 'preserved text content',\n valid: true,\n },\n },\n rowIndex: 0,\n }\n\n const result = mergeFormStateFromClipboard({\n dataFromClipboard: clipboardData,\n formState,\n path: 'layout',\n })\n\n // Non-ID fields should be preserved\n expect(result['layout.0.blockType'].value).toEqual('content')\n expect(result['layout.0.text'].value).toEqual('preserved text content')\n })\n\n it('should generate new ID when pasting from row to field', () => {\n const copiedBlockID = new ObjectId().toHexString()\n\n const formState: FormState = {\n duplicate: {\n valid: true,\n value: 0,\n initialValue: 0,\n rows: [],\n },\n }\n\n // Simulating copying from blocks.1 and pasting into duplicate field\n const clipboardData = {\n type: 'blocks' as const,\n path: 'blocks',\n blocks: [],\n data: {\n 'blocks.1.id': {\n value: copiedBlockID,\n valid: true,\n },\n 'blocks.1.blockType': {\n value: 'number',\n valid: true,\n },\n 'blocks.1.number': {\n value: 342,\n valid: true,\n },\n },\n rowIndex: 1,\n }\n\n const result = mergeFormStateFromClipboard({\n dataFromClipboard: clipboardData,\n formState,\n path: 'duplicate',\n })\n\n // Check that a new ID was generated\n expect(result['duplicate.0.id']).toBeDefined()\n expect(result['duplicate.0.id'].value).toBeDefined()\n expect(result['duplicate.0.id'].value).not.toEqual(copiedBlockID)\n expect(ObjectId.isValid(result['duplicate.0.id'].value as string)).toBe(true)\n\n // Check that the row metadata has the new ID (not the copied ID)\n expect(result.duplicate.rows).toBeDefined()\n expect(result.duplicate.rows).toHaveLength(1)\n expect(result.duplicate.rows![0].id).not.toEqual(copiedBlockID)\n expect(result.duplicate.rows![0].id).toEqual(result['duplicate.0.id'].value)\n\n // Check that other fields were preserved\n expect(result['duplicate.0.number'].value).toEqual(342)\n })\n })\n\n describe('block row paste with nested array', () => {\n it('should regenerate nested array item IDs when pasting a block row', () => {\n const copiedBlockID = new ObjectId().toHexString()\n const copiedArrayItemID1 = new ObjectId().toHexString()\n const copiedArrayItemID2 = new ObjectId().toHexString()\n const copiedArrayItemID3 = new ObjectId().toHexString()\n const targetBlockID = new ObjectId().toHexString()\n\n // Target form state: block at index 1 with empty buttons array\n const formState: FormState = {\n ctas: {\n valid: true,\n value: 2,\n initialValue: 2,\n rows: [\n { id: copiedBlockID, blockType: 'callToAction', isLoading: false },\n { id: targetBlockID, blockType: 'callToAction', isLoading: false },\n ],\n },\n 'ctas.0': { value: 'callToAction', valid: true },\n 'ctas.0.id': { value: copiedBlockID, valid: true },\n 'ctas.0.buttons': {\n valid: true,\n value: 3,\n rows: [\n { id: copiedArrayItemID1, isLoading: false },\n { id: copiedArrayItemID2, isLoading: false },\n { id: copiedArrayItemID3, isLoading: false },\n ],\n },\n 'ctas.0.buttons.0.id': { value: copiedArrayItemID1, valid: true },\n 'ctas.0.buttons.1.id': { value: copiedArrayItemID2, valid: true },\n 'ctas.0.buttons.2.id': { value: copiedArrayItemID3, valid: true },\n 'ctas.1': { value: 'callToAction', valid: true },\n 'ctas.1.id': { value: targetBlockID, valid: true },\n 'ctas.1.buttons': {\n valid: true,\n value: 0,\n rows: [],\n },\n }\n\n // Clipboard: block row 0 (source) with 3 buttons\n const clipboardData: ClipboardPasteData = {\n type: 'blocks',\n path: 'ctas',\n blocks: [],\n rowIndex: 0,\n data: {\n 'ctas.0': { value: 'callToAction', valid: true },\n 'ctas.0.id': { value: copiedBlockID, valid: true },\n 'ctas.0.buttons': {\n valid: true,\n value: 3,\n rows: [\n { id: copiedArrayItemID1, isLoading: false },\n { id: copiedArrayItemID2, isLoading: false },\n { id: copiedArrayItemID3, isLoading: false },\n ],\n },\n 'ctas.0.buttons.0.id': { value: copiedArrayItemID1, valid: true },\n 'ctas.0.buttons.0.label': { value: 'Button 1', valid: true },\n 'ctas.0.buttons.1.id': { value: copiedArrayItemID2, valid: true },\n 'ctas.0.buttons.1.label': { value: 'Button 2', valid: true },\n 'ctas.0.buttons.2.id': { value: copiedArrayItemID3, valid: true },\n 'ctas.0.buttons.2.label': { value: 'Button 3', valid: true },\n },\n }\n\n // Paste into block row 1 (target)\n const result = mergeFormStateFromClipboard({\n dataFromClipboard: clipboardData,\n formState,\n path: 'ctas',\n rowIndex: 1,\n })\n\n // Target block ID should NOT be overwritten\n expect(result['ctas.1.id'].value).toEqual(targetBlockID)\n\n // Nested array items should have NEW IDs (not the source IDs)\n expect(result['ctas.1.buttons.0.id']).toBeDefined()\n expect(result['ctas.1.buttons.0.id'].value).not.toEqual(copiedArrayItemID1)\n expect(ObjectId.isValid(result['ctas.1.buttons.0.id'].value as string)).toBe(true)\n\n expect(result['ctas.1.buttons.1.id']).toBeDefined()\n expect(result['ctas.1.buttons.1.id'].value).not.toEqual(copiedArrayItemID2)\n\n expect(result['ctas.1.buttons.2.id']).toBeDefined()\n expect(result['ctas.1.buttons.2.id'].value).not.toEqual(copiedArrayItemID3)\n\n // The rows metadata in ctas.1.buttons should have the new IDs\n expect(result['ctas.1.buttons'].rows).toHaveLength(3)\n expect(result['ctas.1.buttons'].rows![0].id).toEqual(result['ctas.1.buttons.0.id'].value)\n expect(result['ctas.1.buttons'].rows![1].id).toEqual(result['ctas.1.buttons.1.id'].value)\n expect(result['ctas.1.buttons'].rows![2].id).toEqual(result['ctas.1.buttons.2.id'].value)\n\n // Field values should be copied\n expect(result['ctas.1.buttons.0.label'].value).toEqual('Button 1')\n expect(result['ctas.1.buttons.1.label'].value).toEqual('Button 2')\n expect(result['ctas.1.buttons.2.label'].value).toEqual('Button 3')\n\n // Source block should be untouched\n expect(result['ctas.0.id'].value).toEqual(copiedBlockID)\n expect(result['ctas.0.buttons'].rows).toHaveLength(3)\n })\n })\n\n describe('array ID regeneration', () => {\n it('should generate new IDs when pasting arrays to prevent duplicates', () => {\n const copiedArrayID = new ObjectId().toHexString()\n\n const formState: FormState = {\n items: {\n valid: true,\n value: 0,\n initialValue: 0,\n rows: [],\n },\n }\n\n const clipboardData: ClipboardPasteData = {\n type: 'array',\n path: 'items',\n fields: [],\n data: {\n 'items.0.id': {\n value: copiedArrayID,\n valid: true,\n },\n 'items.0.text': {\n value: 'test content',\n valid: true,\n },\n },\n rowIndex: 0,\n }\n\n const result = mergeFormStateFromClipboard({\n dataFromClipboard: clipboardData,\n formState,\n path: 'items',\n })\n\n // Check that a new ID was generated\n expect(result['items.0.id']).toBeDefined()\n expect(result['items.0.id'].value).toBeDefined()\n expect(result['items.0.id'].value).not.toEqual(copiedArrayID)\n expect(ObjectId.isValid(result['items.0.id'].value as string)).toBe(true)\n\n // Check that the row metadata also has the new ID\n expect(result.items.rows).toHaveLength(1)\n expect(result.items.rows?.[0]?.id).not.toEqual(copiedArrayID)\n expect(result.items.rows?.[0]?.id).toEqual(result['items.0.id'].value)\n })\n\n it('should generate new IDs for nested arrays', () => {\n const copiedArrayID = new ObjectId().toHexString()\n const copiedNestedArrayID = new ObjectId().toHexString()\n\n const formState: FormState = {\n items: {\n valid: true,\n value: 0,\n initialValue: 0,\n rows: [],\n },\n }\n\n const clipboardData: ClipboardPasteData = {\n type: 'array',\n path: 'items',\n fields: [],\n data: {\n 'items.0.id': {\n value: copiedArrayID,\n valid: true,\n },\n 'items.0.text': {\n value: 'parent array',\n valid: true,\n },\n 'items.0.subArray': {\n value: 1,\n valid: true,\n rows: [{ id: copiedNestedArrayID }],\n },\n 'items.0.subArray.0.id': {\n value: copiedNestedArrayID,\n valid: true,\n },\n 'items.0.subArray.0.text': {\n value: 'nested array',\n valid: true,\n },\n },\n rowIndex: 0,\n }\n\n const result = mergeFormStateFromClipboard({\n dataFromClipboard: clipboardData,\n formState,\n path: 'items',\n })\n\n // Check that parent array got new ID\n expect(result['items.0.id'].value).not.toEqual(copiedArrayID)\n expect(ObjectId.isValid(result['items.0.id'].value as string)).toBe(true)\n\n // Check that nested array got new ID\n expect(result['items.0.subArray.0.id'].value).not.toEqual(copiedNestedArrayID)\n expect(ObjectId.isValid(result['items.0.subArray.0.id'].value as string)).toBe(true)\n\n // Check that parent and nested IDs are different\n expect(result['items.0.id'].value).not.toEqual(result['items.0.subArray.0.id'].value)\n\n // Check that parent row metadata has new ID\n expect(result.items.rows?.[0]?.id).toEqual(result['items.0.id'].value)\n\n // Check that nested row metadata has new ID\n expect(result['items.0.subArray'].rows?.[0]?.id).toEqual(\n result['items.0.subArray.0.id'].value,\n )\n })\n\n it('should preserve non-ID field values when pasting arrays', () => {\n const copiedArrayID = new ObjectId().toHexString()\n\n const formState: FormState = {\n items: {\n valid: true,\n value: 0,\n initialValue: 0,\n rows: [],\n },\n }\n\n const clipboardData: ClipboardPasteData = {\n type: 'array',\n path: 'items',\n fields: [],\n data: {\n 'items.0.id': {\n value: copiedArrayID,\n valid: true,\n },\n 'items.0.text': {\n value: 'preserved array text',\n valid: true,\n },\n },\n rowIndex: 0,\n }\n\n const result = mergeFormStateFromClipboard({\n dataFromClipboard: clipboardData,\n formState,\n path: 'items',\n })\n\n // Non-ID fields should be preserved\n expect(result['items.0.text'].value).toEqual('preserved array text')\n })\n\n it('should generate new ID when pasting from array row to field', () => {\n const copiedArrayID = new ObjectId().toHexString()\n\n const formState: FormState = {\n disableSort: {\n valid: true,\n value: 0,\n initialValue: 0,\n rows: [],\n },\n }\n\n // Simulating copying from items.0 and pasting into disableSort field\n const clipboardData = {\n type: 'array' as const,\n path: 'items',\n fields: [],\n data: {\n 'items.0.id': {\n value: copiedArrayID,\n valid: true,\n },\n 'items.0.text': {\n value: 'row one',\n valid: true,\n },\n },\n rowIndex: 0,\n }\n\n const result = mergeFormStateFromClipboard({\n dataFromClipboard: clipboardData,\n formState,\n path: 'disableSort',\n })\n\n // Check that a new ID was generated\n expect(result['disableSort.0.id']).toBeDefined()\n expect(result['disableSort.0.id'].value).toBeDefined()\n expect(result['disableSort.0.id'].value).not.toEqual(copiedArrayID)\n expect(ObjectId.isValid(result['disableSort.0.id'].value as string)).toBe(true)\n\n // Check that the row metadata has the new ID (not the copied ID)\n expect(result.disableSort.rows).toBeDefined()\n expect(result.disableSort.rows).toHaveLength(1)\n expect(result.disableSort.rows![0].id).not.toEqual(copiedArrayID)\n expect(result.disableSort.rows![0].id).toEqual(result['disableSort.0.id'].value)\n\n // Check that other fields were preserved\n expect(result['disableSort.0.text'].value).toEqual('row one')\n })\n })\n})\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Combobox/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAoC,MAAM,OAAO,CAAA;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAGnD,OAAO,cAAc,CAAA;AAIrB;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,aAAa,EAAE,CAAA;IACxB,wDAAwD;IACxD,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;IACzC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAA;AAE3C;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAmG5C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Combobox/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAoC,MAAM,OAAO,CAAA;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAGnD,OAAO,cAAc,CAAA;AAIrB;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,aAAa,EAAE,CAAA;IACxB,wDAAwD;IACxD,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;IACzC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAA;AAE3C;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAoG5C,CAAA"}
@@ -77,6 +77,7 @@ export const Combobox = props => {
77
77
  };
78
78
  return /*#__PURE__*/_jsx("div", {
79
79
  className: `${baseClass}__entry`,
80
+ "data-popup-prevent-close": true,
80
81
  onClick: handleClick,
81
82
  onKeyDown: e_0 => {
82
83
  if (e_0.key === 'Enter' || e_0.key === ' ') {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","useMemo","useRef","useState","Popup","PopupList","baseClass","Combobox","props","entries","minEntriesForSearch","onSelect","onToggleClose","onToggleOpen","searchPlaceholder","popupProps","searchValue","setSearchValue","isOpenRef","searchInputRef","filteredEntries","search","toLowerCase","filter","entry","name","includes","showSearch","length","hasResults","handleToggleOpen","useCallback","active","current","setTimeout","focus","handleToggleClose","_jsx","className","render","close","_jsxs","onChange","e","target","value","placeholder","ref","type","ButtonGroup","map","index","handleClick","onClick","onKeyDown","key","preventDefault","role","tabIndex","Component"],"sources":["../../../src/elements/Combobox/index.tsx"],"sourcesContent":["'use client'\nimport React, { useMemo, useRef, useState } from 'react'\n\nimport type { PopupProps } from '../Popup/index.js'\n\nimport { Popup, PopupList } from '../Popup/index.js'\nimport './index.scss'\n\nconst baseClass = 'combobox'\n\n/**\n * @internal\n * @experimental\n */\nexport type ComboboxEntry = {\n Component: React.ReactNode\n name: string\n}\n\n/**\n * @internal\n * @experimental\n */\nexport type ComboboxProps = {\n entries: ComboboxEntry[]\n /** Minimum number of entries required to show search */\n minEntriesForSearch?: number\n onSelect?: (entry: ComboboxEntry) => void\n searchPlaceholder?: string\n} & Omit<PopupProps, 'children' | 'render'>\n\n/**\n * A wrapper on top of Popup + PopupList.ButtonGroup that adds search functionality.\n *\n * @internal - this component may be removed or receive breaking changes in minor releases.\n * @experimental\n */\nexport const Combobox: React.FC<ComboboxProps> = (props) => {\n const {\n entries,\n minEntriesForSearch = 8,\n onSelect,\n onToggleClose,\n onToggleOpen,\n searchPlaceholder = 'Search...',\n ...popupProps\n } = props\n const [searchValue, setSearchValue] = useState('')\n const isOpenRef = useRef(false)\n const searchInputRef = useRef<HTMLInputElement>(null)\n\n const filteredEntries = useMemo(() => {\n if (!searchValue) {\n return entries\n }\n const search = searchValue.toLowerCase()\n return entries.filter((entry) => entry.name.toLowerCase().includes(search))\n }, [entries, searchValue])\n\n const showSearch = entries.length >= minEntriesForSearch\n const hasResults = filteredEntries.length > 0\n\n const handleToggleOpen = React.useCallback(\n (active: boolean) => {\n isOpenRef.current = active\n if (active && showSearch) {\n setTimeout(() => {\n searchInputRef.current?.focus()\n }, 100)\n }\n onToggleOpen?.(active)\n },\n [showSearch, onToggleOpen],\n )\n\n const handleToggleClose = React.useCallback(() => {\n isOpenRef.current = false\n setSearchValue('')\n onToggleClose?.()\n }, [onToggleClose])\n\n return (\n <Popup\n {...popupProps}\n className={`${baseClass} ${popupProps.className || ''}`}\n onToggleClose={handleToggleClose}\n onToggleOpen={handleToggleOpen}\n render={({ close }) => (\n <div className={`${baseClass}__content`}>\n {showSearch && (\n <div\n className={`${baseClass}__search-wrapper${!hasResults ? ` ${baseClass}__search-wrapper--no-results` : ''}`}\n >\n <input\n aria-label={searchPlaceholder}\n className={`${baseClass}__search-input`}\n onChange={(e) => setSearchValue(e.target.value)}\n placeholder={searchPlaceholder}\n ref={searchInputRef}\n type=\"text\"\n value={searchValue}\n />\n </div>\n )}\n <PopupList.ButtonGroup>\n {filteredEntries.map((entry, index) => {\n const handleClick = () => {\n if (onSelect) {\n onSelect(entry)\n }\n close()\n }\n\n return (\n <div\n className={`${baseClass}__entry`}\n key={`${entry.name}-${index}`}\n onClick={handleClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleClick()\n }\n }}\n role=\"menuitem\"\n tabIndex={0}\n >\n {entry.Component}\n </div>\n )\n })}\n </PopupList.ButtonGroup>\n </div>\n )}\n />\n )\n}\n"],"mappings":"AAAA;;;AACA,OAAOA,KAAA,IAASC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AAIjD,SAASC,KAAK,EAAEC,SAAS,QAAQ;AACjC,OAAO;AAEP,MAAMC,SAAA,GAAY;AAuBlB;;;;;;AAMA,OAAO,MAAMC,QAAA,GAAqCC,KAAA;EAChD,MAAM;IACJC,OAAO;IACPC,mBAAA,GAAsB,CAAC;IACvBC,QAAQ;IACRC,aAAa;IACbC,YAAY;IACZC,iBAAA,GAAoB,WAAW;IAC/B,GAAGC;EAAA,CACJ,GAAGP,KAAA;EACJ,MAAM,CAACQ,WAAA,EAAaC,cAAA,CAAe,GAAGd,QAAA,CAAS;EAC/C,MAAMe,SAAA,GAAYhB,MAAA,CAAO;EACzB,MAAMiB,cAAA,GAAiBjB,MAAA,CAAyB;EAEhD,MAAMkB,eAAA,GAAkBnB,OAAA,CAAQ;IAC9B,IAAI,CAACe,WAAA,EAAa;MAChB,OAAOP,OAAA;IACT;IACA,MAAMY,MAAA,GAASL,WAAA,CAAYM,WAAW;IACtC,OAAOb,OAAA,CAAQc,MAAM,CAAEC,KAAA,IAAUA,KAAA,CAAMC,IAAI,CAACH,WAAW,GAAGI,QAAQ,CAACL,MAAA;EACrE,GAAG,CAACZ,OAAA,EAASO,WAAA,CAAY;EAEzB,MAAMW,UAAA,GAAalB,OAAA,CAAQmB,MAAM,IAAIlB,mBAAA;EACrC,MAAMmB,UAAA,GAAaT,eAAA,CAAgBQ,MAAM,GAAG;EAE5C,MAAME,gBAAA,GAAmB9B,KAAA,CAAM+B,WAAW,CACvCC,MAAA;IACCd,SAAA,CAAUe,OAAO,GAAGD,MAAA;IACpB,IAAIA,MAAA,IAAUL,UAAA,EAAY;MACxBO,UAAA,CAAW;QACTf,cAAA,CAAec,OAAO,EAAEE,KAAA;MAC1B,GAAG;IACL;IACAtB,YAAA,GAAemB,MAAA;EACjB,GACA,CAACL,UAAA,EAAYd,YAAA,CAAa;EAG5B,MAAMuB,iBAAA,GAAoBpC,KAAA,CAAM+B,WAAW,CAAC;IAC1Cb,SAAA,CAAUe,OAAO,GAAG;IACpBhB,cAAA,CAAe;IACfL,aAAA;EACF,GAAG,CAACA,aAAA,CAAc;EAElB,oBACEyB,IAAA,CAACjC,KAAA;IACE,GAAGW,UAAU;IACduB,SAAA,EAAW,GAAGhC,SAAA,IAAaS,UAAA,CAAWuB,SAAS,IAAI,IAAI;IACvD1B,aAAA,EAAewB,iBAAA;IACfvB,YAAA,EAAciB,gBAAA;IACdS,MAAA,EAAQA,CAAC;MAAEC;IAAK,CAAE,kBAChBC,KAAA,CAAC;MAAIH,SAAA,EAAW,GAAGhC,SAAA,WAAoB;iBACpCqB,UAAA,iBACCU,IAAA,CAAC;QACCC,SAAA,EAAW,GAAGhC,SAAA,mBAA4B,CAACuB,UAAA,GAAa,IAAIvB,SAAA,8BAAuC,GAAG,IAAI;kBAE1G,aAAA+B,IAAA,CAAC;UACC,cAAYvB,iBAAA;UACZwB,SAAA,EAAW,GAAGhC,SAAA,gBAAyB;UACvCoC,QAAA,EAAWC,CAAA,IAAM1B,cAAA,CAAe0B,CAAA,CAAEC,MAAM,CAACC,KAAK;UAC9CC,WAAA,EAAahC,iBAAA;UACbiC,GAAA,EAAK5B,cAAA;UACL6B,IAAA,EAAK;UACLH,KAAA,EAAO7B;;uBAIbqB,IAAA,CAAChC,SAAA,CAAU4C,WAAW;kBACnB7B,eAAA,CAAgB8B,GAAG,CAAC,CAAC1B,OAAA,EAAO2B,KAAA;UAC3B,MAAMC,WAAA,GAAcA,CAAA;YAClB,IAAIzC,QAAA,EAAU;cACZA,QAAA,CAASa,OAAA;YACX;YACAgB,KAAA;UACF;UAEA,oBACEH,IAAA,CAAC;YACCC,SAAA,EAAW,GAAGhC,SAAA,SAAkB;YAEhC+C,OAAA,EAASD,WAAA;YACTE,SAAA,EAAYX,GAAA;cACV,IAAIA,GAAA,CAAEY,GAAG,KAAK,WAAWZ,GAAA,CAAEY,GAAG,KAAK,KAAK;gBACtCZ,GAAA,CAAEa,cAAc;gBAChBJ,WAAA;cACF;YACF;YACAK,IAAA,EAAK;YACLC,QAAA,EAAU;sBAETlC,OAAA,CAAMmC;aAXF,GAAGnC,OAAA,CAAMC,IAAI,IAAI0B,KAAA,EAAO;QAcnC;;;;AAMZ","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["React","useMemo","useRef","useState","Popup","PopupList","baseClass","Combobox","props","entries","minEntriesForSearch","onSelect","onToggleClose","onToggleOpen","searchPlaceholder","popupProps","searchValue","setSearchValue","isOpenRef","searchInputRef","filteredEntries","search","toLowerCase","filter","entry","name","includes","showSearch","length","hasResults","handleToggleOpen","useCallback","active","current","setTimeout","focus","handleToggleClose","_jsx","className","render","close","_jsxs","onChange","e","target","value","placeholder","ref","type","ButtonGroup","map","index","handleClick","onClick","onKeyDown","key","preventDefault","role","tabIndex","Component"],"sources":["../../../src/elements/Combobox/index.tsx"],"sourcesContent":["'use client'\nimport React, { useMemo, useRef, useState } from 'react'\n\nimport type { PopupProps } from '../Popup/index.js'\n\nimport { Popup, PopupList } from '../Popup/index.js'\nimport './index.scss'\n\nconst baseClass = 'combobox'\n\n/**\n * @internal\n * @experimental\n */\nexport type ComboboxEntry = {\n Component: React.ReactNode\n name: string\n}\n\n/**\n * @internal\n * @experimental\n */\nexport type ComboboxProps = {\n entries: ComboboxEntry[]\n /** Minimum number of entries required to show search */\n minEntriesForSearch?: number\n onSelect?: (entry: ComboboxEntry) => void\n searchPlaceholder?: string\n} & Omit<PopupProps, 'children' | 'render'>\n\n/**\n * A wrapper on top of Popup + PopupList.ButtonGroup that adds search functionality.\n *\n * @internal - this component may be removed or receive breaking changes in minor releases.\n * @experimental\n */\nexport const Combobox: React.FC<ComboboxProps> = (props) => {\n const {\n entries,\n minEntriesForSearch = 8,\n onSelect,\n onToggleClose,\n onToggleOpen,\n searchPlaceholder = 'Search...',\n ...popupProps\n } = props\n const [searchValue, setSearchValue] = useState('')\n const isOpenRef = useRef(false)\n const searchInputRef = useRef<HTMLInputElement>(null)\n\n const filteredEntries = useMemo(() => {\n if (!searchValue) {\n return entries\n }\n const search = searchValue.toLowerCase()\n return entries.filter((entry) => entry.name.toLowerCase().includes(search))\n }, [entries, searchValue])\n\n const showSearch = entries.length >= minEntriesForSearch\n const hasResults = filteredEntries.length > 0\n\n const handleToggleOpen = React.useCallback(\n (active: boolean) => {\n isOpenRef.current = active\n if (active && showSearch) {\n setTimeout(() => {\n searchInputRef.current?.focus()\n }, 100)\n }\n onToggleOpen?.(active)\n },\n [showSearch, onToggleOpen],\n )\n\n const handleToggleClose = React.useCallback(() => {\n isOpenRef.current = false\n setSearchValue('')\n onToggleClose?.()\n }, [onToggleClose])\n\n return (\n <Popup\n {...popupProps}\n className={`${baseClass} ${popupProps.className || ''}`}\n onToggleClose={handleToggleClose}\n onToggleOpen={handleToggleOpen}\n render={({ close }) => (\n <div className={`${baseClass}__content`}>\n {showSearch && (\n <div\n className={`${baseClass}__search-wrapper${!hasResults ? ` ${baseClass}__search-wrapper--no-results` : ''}`}\n >\n <input\n aria-label={searchPlaceholder}\n className={`${baseClass}__search-input`}\n onChange={(e) => setSearchValue(e.target.value)}\n placeholder={searchPlaceholder}\n ref={searchInputRef}\n type=\"text\"\n value={searchValue}\n />\n </div>\n )}\n <PopupList.ButtonGroup>\n {filteredEntries.map((entry, index) => {\n const handleClick = () => {\n if (onSelect) {\n onSelect(entry)\n }\n close()\n }\n\n return (\n <div\n className={`${baseClass}__entry`}\n data-popup-prevent-close\n key={`${entry.name}-${index}`}\n onClick={handleClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleClick()\n }\n }}\n role=\"menuitem\"\n tabIndex={0}\n >\n {entry.Component}\n </div>\n )\n })}\n </PopupList.ButtonGroup>\n </div>\n )}\n />\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/EditUpload/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAG1C,OAAO,KAA2B,MAAM,OAAO,CAAA;AAE/C,OAAO,qCAAqC,CAAA;AAM5C,OAAO,cAAc,CAAA;AA4BrB,KAAK,aAAa,GAAG;IACnB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACjC,iBAAiB,CAAC,EAAE,aAAa,CAAA;IACjC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAA;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,CAAA;AAUD,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAwQhD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/EditUpload/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAG1C,OAAO,KAA2B,MAAM,OAAO,CAAA;AAE/C,OAAO,qCAAqC,CAAA;AAM5C,OAAO,cAAc,CAAA;AA4BrB,KAAK,aAAa,GAAG;IACnB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACjC,iBAAiB,CAAC,EAAE,aAAa,CAAA;IACjC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAA;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,CAAA;AAUD,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAuQhD,CAAA"}
@@ -136,8 +136,7 @@ export const EditUpload = ({
136
136
  y: yCenter
137
137
  });
138
138
  };
139
- const queryChar = fileSrc?.includes('?') ? '&' : '?';
140
- const fileSrcToUse = imageCacheTag ? `${fileSrc}${queryChar}${encodeURIComponent(imageCacheTag)}` : fileSrc;
139
+ const fileSrcToUse = imageCacheTag ? `${fileSrc}?${encodeURIComponent(imageCacheTag)}` : fileSrc;
141
140
  return /*#__PURE__*/_jsxs("div", {
142
141
  className: baseClass,
143
142
  children: [/*#__PURE__*/_jsxs("div", {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useModal","React","useRef","useState","ReactCrop","editDrawerSlug","PlusIcon","useTranslation","Button","baseClass","Input","props","name","onChange","ref","value","_jsxs","className","_jsx","e","target","type","defaultCrop","height","unit","width","x","y","EditUpload","fileName","fileSrc","imageCacheTag","initialCrop","initialFocalPoint","onSave","showCrop","showFocalPoint","closeModal","t","crop","setCrop","defaultFocalPosition","focalPosition","setFocalPosition","checkBounds","setCheckBounds","uncroppedPixelHeight","setUncroppedPixelHeight","uncroppedPixelWidth","setUncroppedPixelWidth","focalWrapRef","undefined","imageRef","cropRef","heightInputRef","widthInputRef","imageLoaded","setImageLoaded","onImageLoad","currentTarget","naturalHeight","naturalWidth","fineTuneCrop","dimension","intValue","parseInt","percentage","fineTuneFocalPosition","coordinate","prevPosition","saveEdits","focalPoint","heightInPixels","Number","current","widthInPixels","onDragEnd","useCallback","centerFocalPoint","containerRect","getBoundingClientRect","boundsRect","xCenter","left","yCenter","top","queryChar","includes","fileSrcToUse","encodeURIComponent","title","buttonStyle","onClick","disabled","style","aspectRatio","_","c","onComplete","renderSelectionAddon","alt","onLoad","src","DraggableElement","boundsRef","containerRef","initialPosition","toFixed","children","position","setPosition","isDragging","setIsDragging","dragRef","getCoordinates","mouseXArg","mouseYArg","recenter","mouseX","mouseY","xOutOfBounds","right","yOutOfBounds","bottom","handleMouseDown","event","preventDefault","handleMouseMove","clientX","clientY","onDrop","useEffect","filter","Boolean","join","onMouseMove","onMouseDown","onMouseUp"],"sources":["../../../src/elements/EditUpload/index.tsx"],"sourcesContent":["'use client'\n\nimport type { UploadEdits } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport React, { useRef, useState } from 'react'\nimport ReactCrop from 'react-image-crop'\nimport 'react-image-crop/dist/ReactCrop.css'\n\nimport { editDrawerSlug } from '../../elements/Upload/index.js'\nimport { PlusIcon } from '../../icons/Plus/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport './index.scss'\n\nconst baseClass = 'edit-upload'\n\ntype Props = {\n name: string\n onChange: (value: string) => void\n ref?: React.RefObject<HTMLInputElement>\n value: string\n}\n\nconst Input: React.FC<Props> = (props) => {\n const { name, onChange, ref, value } = props\n\n return (\n <div className={`${baseClass}__input`}>\n {name}\n <input\n name={name}\n onChange={(e) => onChange(e.target.value)}\n ref={ref}\n type=\"number\"\n value={value}\n />\n </div>\n )\n}\n\ntype FocalPosition = {\n x: number\n y: number\n}\n\nexport type EditUploadProps = {\n fileName: string\n fileSrc: string\n imageCacheTag?: string\n initialCrop?: UploadEdits['crop']\n initialFocalPoint?: FocalPosition\n onSave?: (uploadEdits: UploadEdits) => void\n showCrop?: boolean\n showFocalPoint?: boolean\n}\n\nconst defaultCrop: UploadEdits['crop'] = {\n height: 100,\n unit: '%',\n width: 100,\n x: 0,\n y: 0,\n}\n\nexport const EditUpload: React.FC<EditUploadProps> = ({\n fileName,\n fileSrc,\n imageCacheTag,\n initialCrop,\n initialFocalPoint,\n onSave,\n showCrop,\n showFocalPoint,\n}) => {\n const { closeModal } = useModal()\n const { t } = useTranslation()\n\n const [crop, setCrop] = useState<UploadEdits['crop']>(() => ({\n ...defaultCrop,\n ...(initialCrop || {}),\n }))\n\n const defaultFocalPosition: FocalPosition = {\n x: 50,\n y: 50,\n }\n\n const [focalPosition, setFocalPosition] = useState<FocalPosition>(() => ({\n ...defaultFocalPosition,\n ...initialFocalPoint,\n }))\n\n const [checkBounds, setCheckBounds] = useState<boolean>(false)\n const [uncroppedPixelHeight, setUncroppedPixelHeight] = useState<number>(0)\n const [uncroppedPixelWidth, setUncroppedPixelWidth] = useState<number>(0)\n\n const focalWrapRef = useRef<HTMLDivElement | undefined>(undefined)\n const imageRef = useRef<HTMLImageElement | undefined>(undefined)\n const cropRef = useRef<HTMLDivElement | undefined>(undefined)\n\n const heightInputRef = useRef<HTMLInputElement | null>(null)\n const widthInputRef = useRef<HTMLInputElement | null>(null)\n\n const [imageLoaded, setImageLoaded] = useState<boolean>(false)\n\n const onImageLoad = (e) => {\n // set the default image height/width on load\n setUncroppedPixelHeight(e.currentTarget.naturalHeight)\n setUncroppedPixelWidth(e.currentTarget.naturalWidth)\n setImageLoaded(true)\n }\n\n const fineTuneCrop = ({ dimension, value }: { dimension: 'height' | 'width'; value: string }) => {\n const intValue = parseInt(value)\n\n const percentage =\n 100 * (intValue / (dimension === 'width' ? uncroppedPixelWidth : uncroppedPixelHeight))\n\n if (percentage <= 0 || percentage > 100) {\n return null\n }\n\n setCrop({\n ...crop,\n [dimension]: percentage,\n })\n }\n\n const fineTuneFocalPosition = ({\n coordinate,\n value,\n }: {\n coordinate: 'x' | 'y'\n value: string\n }) => {\n const intValue = parseInt(value)\n if (intValue >= 0 && intValue <= 100) {\n setFocalPosition((prevPosition) => ({ ...prevPosition, [coordinate]: intValue }))\n }\n }\n\n const saveEdits = () => {\n if (typeof onSave === 'function') {\n onSave({\n crop: crop ? crop : undefined,\n focalPoint: focalPosition,\n heightInPixels: Number(heightInputRef?.current?.value ?? uncroppedPixelHeight),\n widthInPixels: Number(widthInputRef?.current?.value ?? uncroppedPixelWidth),\n })\n }\n closeModal(editDrawerSlug)\n }\n\n const onDragEnd = React.useCallback(({ x, y }) => {\n setFocalPosition({ x, y })\n setCheckBounds(false)\n }, [])\n\n const centerFocalPoint = () => {\n const containerRect = focalWrapRef.current.getBoundingClientRect()\n const boundsRect = showCrop\n ? cropRef.current.getBoundingClientRect()\n : imageRef.current.getBoundingClientRect()\n const xCenter =\n ((boundsRect.left - containerRect.left + boundsRect.width / 2) / containerRect.width) * 100\n const yCenter =\n ((boundsRect.top - containerRect.top + boundsRect.height / 2) / containerRect.height) * 100\n setFocalPosition({ x: xCenter, y: yCenter })\n }\n\n const queryChar = fileSrc?.includes('?') ? '&' : '?'\n const fileSrcToUse = imageCacheTag ? `${fileSrc}${queryChar}${encodeURIComponent(imageCacheTag)}` : fileSrc\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n <h2 title={`${t('general:editing')} ${fileName}`}>\n {t('general:editing')} {fileName}\n </h2>\n <div className={`${baseClass}__actions`}>\n <Button\n aria-label={t('general:cancel')}\n buttonStyle=\"secondary\"\n className={`${baseClass}__cancel`}\n onClick={() => closeModal(editDrawerSlug)}\n >\n {t('general:cancel')}\n </Button>\n <Button\n aria-label={t('general:applyChanges')}\n buttonStyle=\"primary\"\n className={`${baseClass}__save`}\n disabled={!imageLoaded}\n onClick={saveEdits}\n >\n {t('general:applyChanges')}\n </Button>\n </div>\n </div>\n <div className={`${baseClass}__toolWrap`}>\n <div className={`${baseClass}__crop`}>\n <div\n className={`${baseClass}__focal-wrapper`}\n ref={focalWrapRef}\n style={{\n aspectRatio: `${uncroppedPixelWidth / uncroppedPixelHeight}`,\n }}\n >\n {showCrop ? (\n <ReactCrop\n className={`${baseClass}__reactCrop`}\n crop={crop}\n onChange={(_, c) => setCrop(c)}\n onComplete={() => setCheckBounds(true)}\n renderSelectionAddon={() => {\n return <div className={`${baseClass}__crop-window`} ref={cropRef} />\n }}\n >\n <img\n alt={t('upload:setCropArea')}\n onLoad={onImageLoad}\n ref={imageRef}\n src={fileSrcToUse}\n />\n </ReactCrop>\n ) : (\n <img\n alt={t('upload:setFocalPoint')}\n onLoad={onImageLoad}\n ref={imageRef}\n src={fileSrcToUse}\n />\n )}\n {showFocalPoint && (\n <DraggableElement\n boundsRef={showCrop ? cropRef : imageRef}\n checkBounds={showCrop ? checkBounds : false}\n className={`${baseClass}__focalPoint`}\n containerRef={focalWrapRef}\n initialPosition={focalPosition}\n onDragEnd={onDragEnd}\n setCheckBounds={showCrop ? setCheckBounds : false}\n >\n <PlusIcon />\n </DraggableElement>\n )}\n </div>\n </div>\n {(showCrop || showFocalPoint) && (\n <div className={`${baseClass}__sidebar`}>\n {showCrop && (\n <div className={`${baseClass}__groupWrap`}>\n <div>\n <div className={`${baseClass}__titleWrap`}>\n <h3>{t('upload:crop')}</h3>\n <Button\n buttonStyle=\"none\"\n className={`${baseClass}__reset`}\n onClick={() =>\n setCrop({\n height: 100,\n unit: '%',\n width: 100,\n x: 0,\n y: 0,\n })\n }\n >\n {t('general:reset')}\n </Button>\n </div>\n </div>\n <span className={`${baseClass}__description`}>\n {t('upload:cropToolDescription')}\n </span>\n <div className={`${baseClass}__inputsWrap`}>\n <Input\n name={`${t('upload:width')} (px)`}\n onChange={(value) => fineTuneCrop({ dimension: 'width', value })}\n ref={widthInputRef}\n value={((crop.width / 100) * uncroppedPixelWidth).toFixed(0)}\n />\n <Input\n name={`${t('upload:height')} (px)`}\n onChange={(value) => fineTuneCrop({ dimension: 'height', value })}\n ref={heightInputRef}\n value={((crop.height / 100) * uncroppedPixelHeight).toFixed(0)}\n />\n </div>\n </div>\n )}\n\n {showFocalPoint && (\n <div className={`${baseClass}__groupWrap`}>\n <div>\n <div className={`${baseClass}__titleWrap`}>\n <h3>{t('upload:focalPoint')}</h3>\n <Button\n buttonStyle=\"none\"\n className={`${baseClass}__reset`}\n onClick={centerFocalPoint}\n >\n {t('general:reset')}\n </Button>\n </div>\n </div>\n <span className={`${baseClass}__description`}>\n {t('upload:focalPointDescription')}\n </span>\n <div className={`${baseClass}__inputsWrap`}>\n <Input\n name=\"X %\"\n onChange={(value) => fineTuneFocalPosition({ coordinate: 'x', value })}\n value={focalPosition.x.toFixed(0)}\n />\n <Input\n name=\"Y %\"\n onChange={(value) => fineTuneFocalPosition({ coordinate: 'y', value })}\n value={focalPosition.y.toFixed(0)}\n />\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n )\n}\n\nconst DraggableElement = ({\n boundsRef,\n checkBounds,\n children,\n className,\n containerRef,\n initialPosition = { x: 50, y: 50 },\n onDragEnd,\n setCheckBounds,\n}) => {\n const [position, setPosition] = useState({ x: initialPosition.x, y: initialPosition.y })\n const [isDragging, setIsDragging] = useState(false)\n const dragRef = useRef<HTMLButtonElement | undefined>(undefined)\n\n const getCoordinates = React.useCallback(\n (mouseXArg?: number, mouseYArg?: number, recenter?: boolean) => {\n const containerRect = containerRef.current.getBoundingClientRect()\n const boundsRect = boundsRef.current.getBoundingClientRect()\n const mouseX = mouseXArg ?? boundsRect.left\n const mouseY = mouseYArg ?? boundsRect.top\n\n const xOutOfBounds = mouseX < boundsRect.left || mouseX > boundsRect.right\n const yOutOfBounds = mouseY < boundsRect.top || mouseY > boundsRect.bottom\n\n let x = ((mouseX - containerRect.left) / containerRect.width) * 100\n let y = ((mouseY - containerRect.top) / containerRect.height) * 100\n const xCenter =\n ((boundsRect.left - containerRect.left + boundsRect.width / 2) / containerRect.width) * 100\n const yCenter =\n ((boundsRect.top - containerRect.top + boundsRect.height / 2) / containerRect.height) * 100\n if (xOutOfBounds || yOutOfBounds) {\n setIsDragging(false)\n if (mouseX < boundsRect.left) {\n x = ((boundsRect.left - containerRect.left) / containerRect.width) * 100\n } else if (mouseX > boundsRect.right) {\n x =\n ((containerRect.width - (containerRect.right - boundsRect.right)) /\n containerRect.width) *\n 100\n }\n\n if (mouseY < boundsRect.top) {\n y = ((boundsRect.top - containerRect.top) / containerRect.height) * 100\n } else if (mouseY > boundsRect.bottom) {\n y =\n ((containerRect.height - (containerRect.bottom - boundsRect.bottom)) /\n containerRect.height) *\n 100\n }\n\n if (recenter) {\n x = xOutOfBounds ? xCenter : x\n y = yOutOfBounds ? yCenter : y\n }\n }\n\n return { x, y }\n },\n [boundsRef, containerRef],\n )\n\n const handleMouseDown = (event) => {\n event.preventDefault()\n setIsDragging(true)\n }\n\n const handleMouseMove = (event) => {\n if (!isDragging) {\n return null\n }\n const { x, y } = getCoordinates(event.clientX, event.clientY)\n\n setPosition({ x, y })\n }\n\n const onDrop = () => {\n setIsDragging(false)\n onDragEnd(position)\n }\n\n React.useEffect(() => {\n if (isDragging || !dragRef.current) {\n return\n }\n if (checkBounds) {\n const { height, left, top, width } = dragRef.current.getBoundingClientRect()\n const { x, y } = getCoordinates(left + width / 2, top + height / 2, true)\n onDragEnd({ x, y })\n setPosition({ x, y })\n setCheckBounds(false)\n return\n }\n }, [getCoordinates, isDragging, checkBounds, setCheckBounds, position.x, position.y, onDragEnd])\n\n React.useEffect(() => {\n setPosition({ x: initialPosition.x, y: initialPosition.y })\n }, [initialPosition.x, initialPosition.y])\n\n return (\n <div\n className={[\n `${baseClass}__draggable-container`,\n isDragging && `${baseClass}__draggable-container--dragging`,\n ]\n .filter(Boolean)\n .join(' ')}\n onMouseMove={handleMouseMove}\n >\n <button\n className={[`${baseClass}__draggable`, className].filter(Boolean).join(' ')}\n onMouseDown={handleMouseDown}\n onMouseUp={onDrop}\n ref={dragRef}\n style={{ left: `${position.x}%`, top: `${position.y}%` }}\n type=\"button\"\n >\n {children}\n </button>\n <div />\n </div>\n )\n}\n"],"mappings":"AAAA;;;AAIA,SAASA,QAAQ,QAAQ;AACzB,OAAOC,KAAA,IAASC,MAAM,EAAEC,QAAQ,QAAQ;AACxC,OAAOC,SAAA,MAAe;AACtB,OAAO;AAEP,SAASC,cAAc,QAAQ;AAC/B,SAASC,QAAQ,QAAQ;AACzB,SAASC,cAAc,QAAQ;AAC/B,SAASC,MAAM,QAAQ;AACvB,OAAO;AAEP,MAAMC,SAAA,GAAY;AASlB,MAAMC,KAAA,GAA0BC,KAAA;EAC9B,MAAM;IAAEC,IAAI;IAAEC,QAAQ;IAAEC,GAAG;IAAEC;EAAK,CAAE,GAAGJ,KAAA;EAEvC,oBACEK,KAAA,CAAC;IAAIC,SAAA,EAAW,GAAGR,SAAA,SAAkB;eAClCG,IAAA,E,aACDM,IAAA,CAAC;MACCN,IAAA,EAAMA,IAAA;MACNC,QAAA,EAAWM,CAAA,IAAMN,QAAA,CAASM,CAAA,CAAEC,MAAM,CAACL,KAAK;MACxCD,GAAA,EAAKA,GAAA;MACLO,IAAA,EAAK;MACLN,KAAA,EAAOA;;;AAIf;AAkBA,MAAMO,WAAA,GAAmC;EACvCC,MAAA,EAAQ;EACRC,IAAA,EAAM;EACNC,KAAA,EAAO;EACPC,CAAA,EAAG;EACHC,CAAA,EAAG;AACL;AAEA,OAAO,MAAMC,UAAA,GAAwCA,CAAC;EACpDC,QAAQ;EACRC,OAAO;EACPC,aAAa;EACbC,WAAW;EACXC,iBAAiB;EACjBC,MAAM;EACNC,QAAQ;EACRC;AAAc,CACf;EACC,MAAM;IAAEC;EAAU,CAAE,GAAGrC,QAAA;EACvB,MAAM;IAAEsC;EAAC,CAAE,GAAG/B,cAAA;EAEd,MAAM,CAACgC,IAAA,EAAMC,OAAA,CAAQ,GAAGrC,QAAA,CAA8B,OAAO;IAC3D,GAAGmB,WAAW;IACd,IAAIU,WAAA,IAAe,CAAC,CAAC;EACvB;EAEA,MAAMS,oBAAA,GAAsC;IAC1Cf,CAAA,EAAG;IACHC,CAAA,EAAG;EACL;EAEA,MAAM,CAACe,aAAA,EAAeC,gBAAA,CAAiB,GAAGxC,QAAA,CAAwB,OAAO;IACvE,GAAGsC,oBAAoB;IACvB,GAAGR;EACL;EAEA,MAAM,CAACW,WAAA,EAAaC,cAAA,CAAe,GAAG1C,QAAA,CAAkB;EACxD,MAAM,CAAC2C,oBAAA,EAAsBC,uBAAA,CAAwB,GAAG5C,QAAA,CAAiB;EACzE,MAAM,CAAC6C,mBAAA,EAAqBC,sBAAA,CAAuB,GAAG9C,QAAA,CAAiB;EAEvE,MAAM+C,YAAA,GAAehD,MAAA,CAAmCiD,SAAA;EACxD,MAAMC,QAAA,GAAWlD,MAAA,CAAqCiD,SAAA;EACtD,MAAME,OAAA,GAAUnD,MAAA,CAAmCiD,SAAA;EAEnD,MAAMG,cAAA,GAAiBpD,MAAA,CAAgC;EACvD,MAAMqD,aAAA,GAAgBrD,MAAA,CAAgC;EAEtD,MAAM,CAACsD,WAAA,EAAaC,cAAA,CAAe,GAAGtD,QAAA,CAAkB;EAExD,MAAMuD,WAAA,GAAevC,CAAA;IACnB;IACA4B,uBAAA,CAAwB5B,CAAA,CAAEwC,aAAa,CAACC,aAAa;IACrDX,sBAAA,CAAuB9B,CAAA,CAAEwC,aAAa,CAACE,YAAY;IACnDJ,cAAA,CAAe;EACjB;EAEA,MAAMK,YAAA,GAAeA,CAAC;IAAEC,SAAS;IAAEhD;EAAK,CAAoD;IAC1F,MAAMiD,QAAA,GAAWC,QAAA,CAASlD,KAAA;IAE1B,MAAMmD,UAAA,GACJ,OAAOF,QAAA,IAAYD,SAAA,KAAc,UAAUf,mBAAA,GAAsBF,oBAAmB,CAAC;IAEvF,IAAIoB,UAAA,IAAc,KAAKA,UAAA,GAAa,KAAK;MACvC,OAAO;IACT;IAEA1B,OAAA,CAAQ;MACN,GAAGD,IAAI;MACP,CAACwB,SAAA,GAAYG;IACf;EACF;EAEA,MAAMC,qBAAA,GAAwBA,CAAC;IAC7BC,UAAU;IACVrD,KAAK,EAALA;EAAK,CAIN;IACC,MAAMiD,UAAA,GAAWC,QAAA,CAASlD,OAAA;IAC1B,IAAIiD,UAAA,IAAY,KAAKA,UAAA,IAAY,KAAK;MACpCrB,gBAAA,CAAkB0B,YAAA,KAAkB;QAAE,GAAGA,YAAY;QAAE,CAACD,UAAA,GAAaJ;MAAS;IAChF;EACF;EAEA,MAAMM,SAAA,GAAYA,CAAA;IAChB,IAAI,OAAOpC,MAAA,KAAW,YAAY;MAChCA,MAAA,CAAO;QACLK,IAAA,EAAMA,IAAA,GAAOA,IAAA,GAAOY,SAAA;QACpBoB,UAAA,EAAY7B,aAAA;QACZ8B,cAAA,EAAgBC,MAAA,CAAOnB,cAAA,EAAgBoB,OAAA,EAAS3D,KAAA,IAAS+B,oBAAA;QACzD6B,aAAA,EAAeF,MAAA,CAAOlB,aAAA,EAAemB,OAAA,EAAS3D,KAAA,IAASiC,mBAAA;MACzD;IACF;IACAX,UAAA,CAAWhC,cAAA;EACb;EAEA,MAAMuE,SAAA,GAAY3E,KAAA,CAAM4E,WAAW,CAAC,CAAC;IAAEnD,CAAC;IAAEC;EAAC,CAAE;IAC3CgB,gBAAA,CAAiB;MAAEjB,CAAA;MAAGC;IAAE;IACxBkB,cAAA,CAAe;EACjB,GAAG,EAAE;EAEL,MAAMiC,gBAAA,GAAmBA,CAAA;IACvB,MAAMC,aAAA,GAAgB7B,YAAA,CAAawB,OAAO,CAACM,qBAAqB;IAChE,MAAMC,UAAA,GAAa9C,QAAA,GACfkB,OAAA,CAAQqB,OAAO,CAACM,qBAAqB,KACrC5B,QAAA,CAASsB,OAAO,CAACM,qBAAqB;IAC1C,MAAME,OAAA,GACJ,CAAED,UAAA,CAAWE,IAAI,GAAGJ,aAAA,CAAcI,IAAI,GAAGF,UAAA,CAAWxD,KAAK,GAAG,KAAKsD,aAAA,CAActD,KAAK,GAAI;IAC1F,MAAM2D,OAAA,GACJ,CAAEH,UAAA,CAAWI,GAAG,GAAGN,aAAA,CAAcM,GAAG,GAAGJ,UAAA,CAAW1D,MAAM,GAAG,KAAKwD,aAAA,CAAcxD,MAAM,GAAI;IAC1FoB,gBAAA,CAAiB;MAAEjB,CAAA,EAAGwD,OAAA;MAASvD,CAAA,EAAGyD;IAAQ;EAC5C;EAEA,MAAME,SAAA,GAAYxD,OAAA,EAASyD,QAAA,CAAS,OAAO,MAAM;EACjD,MAAMC,YAAA,GAAezD,aAAA,GAAgB,GAAGD,OAAA,GAAUwD,SAAA,GAAYG,kBAAA,CAAmB1D,aAAA,GAAgB,GAAGD,OAAA;EAEpG,oBACEd,KAAA,CAAC;IAAIC,SAAA,EAAWR,SAAA;4BACdO,KAAA,CAAC;MAAIC,SAAA,EAAW,GAAGR,SAAA,UAAmB;8BACpCO,KAAA,CAAC;QAAG0E,KAAA,EAAO,GAAGpD,CAAA,CAAE,sBAAsBT,QAAA,EAAU;mBAC7CS,CAAA,CAAE,oBAAmB,KAAET,QAAA;uBAE1Bb,KAAA,CAAC;QAAIC,SAAA,EAAW,GAAGR,SAAA,WAAoB;gCACrCS,IAAA,CAACV,MAAA;UACC,cAAY8B,CAAA,CAAE;UACdqD,WAAA,EAAY;UACZ1E,SAAA,EAAW,GAAGR,SAAA,UAAmB;UACjCmF,OAAA,EAASA,CAAA,KAAMvD,UAAA,CAAWhC,cAAA;oBAEzBiC,CAAA,CAAE;yBAELpB,IAAA,CAACV,MAAA;UACC,cAAY8B,CAAA,CAAE;UACdqD,WAAA,EAAY;UACZ1E,SAAA,EAAW,GAAGR,SAAA,QAAiB;UAC/BoF,QAAA,EAAU,CAACrC,WAAA;UACXoC,OAAA,EAAStB,SAAA;oBAERhC,CAAA,CAAE;;;qBAITtB,KAAA,CAAC;MAAIC,SAAA,EAAW,GAAGR,SAAA,YAAqB;8BACtCS,IAAA,CAAC;QAAID,SAAA,EAAW,GAAGR,SAAA,QAAiB;kBAClC,aAAAO,KAAA,CAAC;UACCC,SAAA,EAAW,GAAGR,SAAA,iBAA0B;UACxCK,GAAA,EAAKoC,YAAA;UACL4C,KAAA,EAAO;YACLC,WAAA,EAAa,GAAG/C,mBAAA,GAAsBF,oBAAA;UACxC;qBAECX,QAAA,gBACCjB,IAAA,CAACd,SAAA;YACCa,SAAA,EAAW,GAAGR,SAAA,aAAsB;YACpC8B,IAAA,EAAMA,IAAA;YACN1B,QAAA,EAAUA,CAACmF,CAAA,EAAGC,CAAA,KAAMzD,OAAA,CAAQyD,CAAA;YAC5BC,UAAA,EAAYA,CAAA,KAAMrD,cAAA,CAAe;YACjCsD,oBAAA,EAAsBA,CAAA;cACpB,oBAAOjF,IAAA,CAAC;gBAAID,SAAA,EAAW,GAAGR,SAAA,eAAwB;gBAAEK,GAAA,EAAKuC;;YAC3D;sBAEA,aAAAnC,IAAA,CAAC;cACCkF,GAAA,EAAK9D,CAAA,CAAE;cACP+D,MAAA,EAAQ3C,WAAA;cACR5C,GAAA,EAAKsC,QAAA;cACLkD,GAAA,EAAKd;;4BAITtE,IAAA,CAAC;YACCkF,GAAA,EAAK9D,CAAA,CAAE;YACP+D,MAAA,EAAQ3C,WAAA;YACR5C,GAAA,EAAKsC,QAAA;YACLkD,GAAA,EAAKd;cAGRpD,cAAA,iBACClB,IAAA,CAACqF,gBAAA;YACCC,SAAA,EAAWrE,QAAA,GAAWkB,OAAA,GAAUD,QAAA;YAChCR,WAAA,EAAaT,QAAA,GAAWS,WAAA,GAAc;YACtC3B,SAAA,EAAW,GAAGR,SAAA,cAAuB;YACrCgG,YAAA,EAAcvD,YAAA;YACdwD,eAAA,EAAiBhE,aAAA;YACjBkC,SAAA,EAAWA,SAAA;YACX/B,cAAA,EAAgBV,QAAA,GAAWU,cAAA,GAAiB;sBAE5C,aAAA3B,IAAA,CAACZ,QAAA;;;UAKP,CAAA6B,QAAA,IAAYC,cAAa,kBACzBpB,KAAA,CAAC;QAAIC,SAAA,EAAW,GAAGR,SAAA,WAAoB;mBACpC0B,QAAA,iBACCnB,KAAA,CAAC;UAAIC,SAAA,EAAW,GAAGR,SAAA,aAAsB;kCACvCS,IAAA,CAAC;sBACC,aAAAF,KAAA,CAAC;cAAIC,SAAA,EAAW,GAAGR,SAAA,aAAsB;sCACvCS,IAAA,CAAC;0BAAIoB,CAAA,CAAE;+BACPpB,IAAA,CAACV,MAAA;gBACCmF,WAAA,EAAY;gBACZ1E,SAAA,EAAW,GAAGR,SAAA,SAAkB;gBAChCmF,OAAA,EAASA,CAAA,KACPpD,OAAA,CAAQ;kBACNjB,MAAA,EAAQ;kBACRC,IAAA,EAAM;kBACNC,KAAA,EAAO;kBACPC,CAAA,EAAG;kBACHC,CAAA,EAAG;gBACL;0BAGDW,CAAA,CAAE;;;2BAITpB,IAAA,CAAC;YAAKD,SAAA,EAAW,GAAGR,SAAA,eAAwB;sBACzC6B,CAAA,CAAE;2BAELtB,KAAA,CAAC;YAAIC,SAAA,EAAW,GAAGR,SAAA,cAAuB;oCACxCS,IAAA,CAACR,KAAA;cACCE,IAAA,EAAM,GAAG0B,CAAA,CAAE,sBAAsB;cACjCzB,QAAA,EAAWE,OAAA,IAAU+C,YAAA,CAAa;gBAAEC,SAAA,EAAW;gBAAShD,KAAA,EAAAA;cAAM;cAC9DD,GAAA,EAAKyC,aAAA;cACLxC,KAAA,EAAO,CAACwB,IAAC,CAAKd,KAAK,GAAG,MAAOuB,mBAAkB,EAAG2D,OAAO,CAAC;6BAE5DzF,IAAA,CAACR,KAAA;cACCE,IAAA,EAAM,GAAG0B,CAAA,CAAE,uBAAuB;cAClCzB,QAAA,EAAWE,OAAA,IAAU+C,YAAA,CAAa;gBAAEC,SAAA,EAAW;gBAAUhD,KAAA,EAAAA;cAAM;cAC/DD,GAAA,EAAKwC,cAAA;cACLvC,KAAA,EAAO,CAACwB,IAAC,CAAKhB,MAAM,GAAG,MAAOuB,oBAAmB,EAAG6D,OAAO,CAAC;;;YAMnEvE,cAAA,iBACCpB,KAAA,CAAC;UAAIC,SAAA,EAAW,GAAGR,SAAA,aAAsB;kCACvCS,IAAA,CAAC;sBACC,aAAAF,KAAA,CAAC;cAAIC,SAAA,EAAW,GAAGR,SAAA,aAAsB;sCACvCS,IAAA,CAAC;0BAAIoB,CAAA,CAAE;+BACPpB,IAAA,CAACV,MAAA;gBACCmF,WAAA,EAAY;gBACZ1E,SAAA,EAAW,GAAGR,SAAA,SAAkB;gBAChCmF,OAAA,EAASd,gBAAA;0BAERxC,CAAA,CAAE;;;2BAITpB,IAAA,CAAC;YAAKD,SAAA,EAAW,GAAGR,SAAA,eAAwB;sBACzC6B,CAAA,CAAE;2BAELtB,KAAA,CAAC;YAAIC,SAAA,EAAW,GAAGR,SAAA,cAAuB;oCACxCS,IAAA,CAACR,KAAA;cACCE,IAAA,EAAK;cACLC,QAAA,EAAWE,OAAA,IAAUoD,qBAAA,CAAsB;gBAAEC,UAAA,EAAY;gBAAKrD,KAAA,EAAAA;cAAM;cACpEA,KAAA,EAAO2B,aAAA,CAAchB,CAAC,CAACiF,OAAO,CAAC;6BAEjCzF,IAAA,CAACR,KAAA;cACCE,IAAA,EAAK;cACLC,QAAA,EAAWE,OAAA,IAAUoD,qBAAA,CAAsB;gBAAEC,UAAA,EAAY;gBAAKrD,KAAA,EAAAA;cAAM;cACpEA,KAAA,EAAO2B,aAAA,CAAcf,CAAC,CAACgF,OAAO,CAAC;;;;;;;AAUnD;AAEA,MAAMJ,gBAAA,GAAmBA,CAAC;EACxBC,SAAS;EACT5D,WAAW;EACXgE,QAAQ;EACR3F,SAAS;EACTwF,YAAY;EACZC,eAAA,GAAkB;IAAEhF,CAAA,EAAG;IAAIC,CAAA,EAAG;EAAG,CAAC;EAClCiD,SAAS;EACT/B;AAAc,CACf;EACC,MAAM,CAACgE,QAAA,EAAUC,WAAA,CAAY,GAAG3G,QAAA,CAAS;IAAEuB,CAAA,EAAGgF,eAAA,CAAgBhF,CAAC;IAAEC,CAAA,EAAG+E,eAAA,CAAgB/E;EAAE;EACtF,MAAM,CAACoF,UAAA,EAAYC,aAAA,CAAc,GAAG7G,QAAA,CAAS;EAC7C,MAAM8G,OAAA,GAAU/G,MAAA,CAAsCiD,SAAA;EAEtD,MAAM+D,cAAA,GAAiBjH,KAAA,CAAM4E,WAAW,CACtC,CAACsC,SAAA,EAAoBC,SAAA,EAAoBC,QAAA;IACvC,MAAMtC,aAAA,GAAgB0B,YAAA,CAAa/B,OAAO,CAACM,qBAAqB;IAChE,MAAMC,UAAA,GAAauB,SAAA,CAAU9B,OAAO,CAACM,qBAAqB;IAC1D,MAAMsC,MAAA,GAASH,SAAA,IAAalC,UAAA,CAAWE,IAAI;IAC3C,MAAMoC,MAAA,GAASH,SAAA,IAAanC,UAAA,CAAWI,GAAG;IAE1C,MAAMmC,YAAA,GAAeF,MAAA,GAASrC,UAAA,CAAWE,IAAI,IAAImC,MAAA,GAASrC,UAAA,CAAWwC,KAAK;IAC1E,MAAMC,YAAA,GAAeH,MAAA,GAAStC,UAAA,CAAWI,GAAG,IAAIkC,MAAA,GAAStC,UAAA,CAAW0C,MAAM;IAE1E,IAAIjG,CAAA,GAAI,CAAE4F,MAAA,GAASvC,aAAA,CAAcI,IAAI,IAAIJ,aAAA,CAActD,KAAK,GAAI;IAChE,IAAIE,CAAA,GAAI,CAAE4F,MAAA,GAASxC,aAAA,CAAcM,GAAG,IAAIN,aAAA,CAAcxD,MAAM,GAAI;IAChE,MAAM2D,OAAA,GACJ,CAAED,UAAA,CAAWE,IAAI,GAAGJ,aAAA,CAAcI,IAAI,GAAGF,UAAA,CAAWxD,KAAK,GAAG,KAAKsD,aAAA,CAActD,KAAK,GAAI;IAC1F,MAAM2D,OAAA,GACJ,CAAEH,UAAA,CAAWI,GAAG,GAAGN,aAAA,CAAcM,GAAG,GAAGJ,UAAA,CAAW1D,MAAM,GAAG,KAAKwD,aAAA,CAAcxD,MAAM,GAAI;IAC1F,IAAIiG,YAAA,IAAgBE,YAAA,EAAc;MAChCV,aAAA,CAAc;MACd,IAAIM,MAAA,GAASrC,UAAA,CAAWE,IAAI,EAAE;QAC5BzD,CAAA,GAAI,CAAEuD,UAAA,CAAWE,IAAI,GAAGJ,aAAA,CAAcI,IAAI,IAAIJ,aAAA,CAActD,KAAK,GAAI;MACvE,OAAO,IAAI6F,MAAA,GAASrC,UAAA,CAAWwC,KAAK,EAAE;QACpC/F,CAAA,GACE,CAAEqD,aAAA,CAActD,KAAK,IAAIsD,aAAA,CAAc0C,KAAK,GAAGxC,UAAA,CAAWwC,KAAK,KAC7D1C,aAAA,CAActD,KAAK,GACrB;MACJ;MAEA,IAAI8F,MAAA,GAAStC,UAAA,CAAWI,GAAG,EAAE;QAC3B1D,CAAA,GAAI,CAAEsD,UAAA,CAAWI,GAAG,GAAGN,aAAA,CAAcM,GAAG,IAAIN,aAAA,CAAcxD,MAAM,GAAI;MACtE,OAAO,IAAIgG,MAAA,GAAStC,UAAA,CAAW0C,MAAM,EAAE;QACrChG,CAAA,GACE,CAAEoD,aAAA,CAAcxD,MAAM,IAAIwD,aAAA,CAAc4C,MAAM,GAAG1C,UAAA,CAAW0C,MAAM,KAChE5C,aAAA,CAAcxD,MAAM,GACtB;MACJ;MAEA,IAAI8F,QAAA,EAAU;QACZ3F,CAAA,GAAI8F,YAAA,GAAetC,OAAA,GAAUxD,CAAA;QAC7BC,CAAA,GAAI+F,YAAA,GAAetC,OAAA,GAAUzD,CAAA;MAC/B;IACF;IAEA,OAAO;MAAED,CAAA;MAAGC;IAAE;EAChB,GACA,CAAC6E,SAAA,EAAWC,YAAA,CAAa;EAG3B,MAAMmB,eAAA,GAAmBC,KAAA;IACvBA,KAAA,CAAMC,cAAc;IACpBd,aAAA,CAAc;EAChB;EAEA,MAAMe,eAAA,GAAmBF,OAAA;IACvB,IAAI,CAACd,UAAA,EAAY;MACf,OAAO;IACT;IACA,MAAM;MAAErF,CAAC,EAADA,GAAC;MAAEC,CAAC,EAADA;IAAC,CAAE,GAAGuF,cAAA,CAAeW,OAAA,CAAMG,OAAO,EAAEH,OAAA,CAAMI,OAAO;IAE5DnB,WAAA,CAAY;MAAEpF,CAAA,EAAAA,GAAA;MAAGC,CAAA,EAAAA;IAAE;EACrB;EAEA,MAAMuG,MAAA,GAASA,CAAA;IACblB,aAAA,CAAc;IACdpC,SAAA,CAAUiC,QAAA;EACZ;EAEA5G,KAAA,CAAMkI,SAAS,CAAC;IACd,IAAIpB,UAAA,IAAc,CAACE,OAAA,CAAQvC,OAAO,EAAE;MAClC;IACF;IACA,IAAI9B,WAAA,EAAa;MACf,MAAM;QAAErB,MAAM;QAAE4D,IAAI;QAAEE,GAAG;QAAE5D;MAAK,CAAE,GAAGwF,OAAA,CAAQvC,OAAO,CAACM,qBAAqB;MAC1E,MAAM;QAAEtD,CAAC,EAADA,GAAC;QAAEC,CAAC,EAADA;MAAC,CAAE,GAAGuF,cAAA,CAAe/B,IAAA,GAAO1D,KAAA,GAAQ,GAAG4D,GAAA,GAAM9D,MAAA,GAAS,GAAG;MACpEqD,SAAA,CAAU;QAAElD,CAAA,EAAAA,GAAA;QAAGC,CAAA,EAAAA;MAAE;MACjBmF,WAAA,CAAY;QAAEpF,CAAA,EAAAA,GAAA;QAAGC,CAAA,EAAAA;MAAE;MACnBkB,cAAA,CAAe;MACf;IACF;EACF,GAAG,CAACqE,cAAA,EAAgBH,UAAA,EAAYnE,WAAA,EAAaC,cAAA,EAAgBgE,QAAA,CAASnF,CAAC,EAAEmF,QAAA,CAASlF,CAAC,EAAEiD,SAAA,CAAU;EAE/F3E,KAAA,CAAMkI,SAAS,CAAC;IACdrB,WAAA,CAAY;MAAEpF,CAAA,EAAGgF,eAAA,CAAgBhF,CAAC;MAAEC,CAAA,EAAG+E,eAAA,CAAgB/E;IAAE;EAC3D,GAAG,CAAC+E,eAAA,CAAgBhF,CAAC,EAAEgF,eAAA,CAAgB/E,CAAC,CAAC;EAEzC,oBACEX,KAAA,CAAC;IACCC,SAAA,EAAW,CACT,GAAGR,SAAA,uBAAgC,EACnCsG,UAAA,IAAc,GAAGtG,SAAA,iCAA0C,CAC5D,CACE2H,MAAM,CAACC,OAAA,EACPC,IAAI,CAAC;IACRC,WAAA,EAAaR,eAAA;4BAEb7G,IAAA,CAAC;MACCD,SAAA,EAAW,CAAC,GAAGR,SAAA,aAAsB,EAAEQ,SAAA,CAAU,CAACmH,MAAM,CAACC,OAAA,EAASC,IAAI,CAAC;MACvEE,WAAA,EAAaZ,eAAA;MACba,SAAA,EAAWP,MAAA;MACXpH,GAAA,EAAKmG,OAAA;MACLnB,KAAA,EAAO;QAAEX,IAAA,EAAM,GAAG0B,QAAA,CAASnF,CAAC,GAAG;QAAE2D,GAAA,EAAK,GAAGwB,QAAA,CAASlF,CAAC;MAAI;MACvDN,IAAA,EAAK;gBAEJuF;qBAEH1F,IAAA,CAAC;;AAGP","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useModal","React","useRef","useState","ReactCrop","editDrawerSlug","PlusIcon","useTranslation","Button","baseClass","Input","props","name","onChange","ref","value","_jsxs","className","_jsx","e","target","type","defaultCrop","height","unit","width","x","y","EditUpload","fileName","fileSrc","imageCacheTag","initialCrop","initialFocalPoint","onSave","showCrop","showFocalPoint","closeModal","t","crop","setCrop","defaultFocalPosition","focalPosition","setFocalPosition","checkBounds","setCheckBounds","uncroppedPixelHeight","setUncroppedPixelHeight","uncroppedPixelWidth","setUncroppedPixelWidth","focalWrapRef","undefined","imageRef","cropRef","heightInputRef","widthInputRef","imageLoaded","setImageLoaded","onImageLoad","currentTarget","naturalHeight","naturalWidth","fineTuneCrop","dimension","intValue","parseInt","percentage","fineTuneFocalPosition","coordinate","prevPosition","saveEdits","focalPoint","heightInPixels","Number","current","widthInPixels","onDragEnd","useCallback","centerFocalPoint","containerRect","getBoundingClientRect","boundsRect","xCenter","left","yCenter","top","fileSrcToUse","encodeURIComponent","title","buttonStyle","onClick","disabled","style","aspectRatio","_","c","onComplete","renderSelectionAddon","alt","onLoad","src","DraggableElement","boundsRef","containerRef","initialPosition","toFixed","children","position","setPosition","isDragging","setIsDragging","dragRef","getCoordinates","mouseXArg","mouseYArg","recenter","mouseX","mouseY","xOutOfBounds","right","yOutOfBounds","bottom","handleMouseDown","event","preventDefault","handleMouseMove","clientX","clientY","onDrop","useEffect","filter","Boolean","join","onMouseMove","onMouseDown","onMouseUp"],"sources":["../../../src/elements/EditUpload/index.tsx"],"sourcesContent":["'use client'\n\nimport type { UploadEdits } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport React, { useRef, useState } from 'react'\nimport ReactCrop from 'react-image-crop'\nimport 'react-image-crop/dist/ReactCrop.css'\n\nimport { editDrawerSlug } from '../../elements/Upload/index.js'\nimport { PlusIcon } from '../../icons/Plus/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport './index.scss'\n\nconst baseClass = 'edit-upload'\n\ntype Props = {\n name: string\n onChange: (value: string) => void\n ref?: React.RefObject<HTMLInputElement>\n value: string\n}\n\nconst Input: React.FC<Props> = (props) => {\n const { name, onChange, ref, value } = props\n\n return (\n <div className={`${baseClass}__input`}>\n {name}\n <input\n name={name}\n onChange={(e) => onChange(e.target.value)}\n ref={ref}\n type=\"number\"\n value={value}\n />\n </div>\n )\n}\n\ntype FocalPosition = {\n x: number\n y: number\n}\n\nexport type EditUploadProps = {\n fileName: string\n fileSrc: string\n imageCacheTag?: string\n initialCrop?: UploadEdits['crop']\n initialFocalPoint?: FocalPosition\n onSave?: (uploadEdits: UploadEdits) => void\n showCrop?: boolean\n showFocalPoint?: boolean\n}\n\nconst defaultCrop: UploadEdits['crop'] = {\n height: 100,\n unit: '%',\n width: 100,\n x: 0,\n y: 0,\n}\n\nexport const EditUpload: React.FC<EditUploadProps> = ({\n fileName,\n fileSrc,\n imageCacheTag,\n initialCrop,\n initialFocalPoint,\n onSave,\n showCrop,\n showFocalPoint,\n}) => {\n const { closeModal } = useModal()\n const { t } = useTranslation()\n\n const [crop, setCrop] = useState<UploadEdits['crop']>(() => ({\n ...defaultCrop,\n ...(initialCrop || {}),\n }))\n\n const defaultFocalPosition: FocalPosition = {\n x: 50,\n y: 50,\n }\n\n const [focalPosition, setFocalPosition] = useState<FocalPosition>(() => ({\n ...defaultFocalPosition,\n ...initialFocalPoint,\n }))\n\n const [checkBounds, setCheckBounds] = useState<boolean>(false)\n const [uncroppedPixelHeight, setUncroppedPixelHeight] = useState<number>(0)\n const [uncroppedPixelWidth, setUncroppedPixelWidth] = useState<number>(0)\n\n const focalWrapRef = useRef<HTMLDivElement | undefined>(undefined)\n const imageRef = useRef<HTMLImageElement | undefined>(undefined)\n const cropRef = useRef<HTMLDivElement | undefined>(undefined)\n\n const heightInputRef = useRef<HTMLInputElement | null>(null)\n const widthInputRef = useRef<HTMLInputElement | null>(null)\n\n const [imageLoaded, setImageLoaded] = useState<boolean>(false)\n\n const onImageLoad = (e) => {\n // set the default image height/width on load\n setUncroppedPixelHeight(e.currentTarget.naturalHeight)\n setUncroppedPixelWidth(e.currentTarget.naturalWidth)\n setImageLoaded(true)\n }\n\n const fineTuneCrop = ({ dimension, value }: { dimension: 'height' | 'width'; value: string }) => {\n const intValue = parseInt(value)\n\n const percentage =\n 100 * (intValue / (dimension === 'width' ? uncroppedPixelWidth : uncroppedPixelHeight))\n\n if (percentage <= 0 || percentage > 100) {\n return null\n }\n\n setCrop({\n ...crop,\n [dimension]: percentage,\n })\n }\n\n const fineTuneFocalPosition = ({\n coordinate,\n value,\n }: {\n coordinate: 'x' | 'y'\n value: string\n }) => {\n const intValue = parseInt(value)\n if (intValue >= 0 && intValue <= 100) {\n setFocalPosition((prevPosition) => ({ ...prevPosition, [coordinate]: intValue }))\n }\n }\n\n const saveEdits = () => {\n if (typeof onSave === 'function') {\n onSave({\n crop: crop ? crop : undefined,\n focalPoint: focalPosition,\n heightInPixels: Number(heightInputRef?.current?.value ?? uncroppedPixelHeight),\n widthInPixels: Number(widthInputRef?.current?.value ?? uncroppedPixelWidth),\n })\n }\n closeModal(editDrawerSlug)\n }\n\n const onDragEnd = React.useCallback(({ x, y }) => {\n setFocalPosition({ x, y })\n setCheckBounds(false)\n }, [])\n\n const centerFocalPoint = () => {\n const containerRect = focalWrapRef.current.getBoundingClientRect()\n const boundsRect = showCrop\n ? cropRef.current.getBoundingClientRect()\n : imageRef.current.getBoundingClientRect()\n const xCenter =\n ((boundsRect.left - containerRect.left + boundsRect.width / 2) / containerRect.width) * 100\n const yCenter =\n ((boundsRect.top - containerRect.top + boundsRect.height / 2) / containerRect.height) * 100\n setFocalPosition({ x: xCenter, y: yCenter })\n }\n\n const fileSrcToUse = imageCacheTag ? `${fileSrc}?${encodeURIComponent(imageCacheTag)}` : fileSrc\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n <h2 title={`${t('general:editing')} ${fileName}`}>\n {t('general:editing')} {fileName}\n </h2>\n <div className={`${baseClass}__actions`}>\n <Button\n aria-label={t('general:cancel')}\n buttonStyle=\"secondary\"\n className={`${baseClass}__cancel`}\n onClick={() => closeModal(editDrawerSlug)}\n >\n {t('general:cancel')}\n </Button>\n <Button\n aria-label={t('general:applyChanges')}\n buttonStyle=\"primary\"\n className={`${baseClass}__save`}\n disabled={!imageLoaded}\n onClick={saveEdits}\n >\n {t('general:applyChanges')}\n </Button>\n </div>\n </div>\n <div className={`${baseClass}__toolWrap`}>\n <div className={`${baseClass}__crop`}>\n <div\n className={`${baseClass}__focal-wrapper`}\n ref={focalWrapRef}\n style={{\n aspectRatio: `${uncroppedPixelWidth / uncroppedPixelHeight}`,\n }}\n >\n {showCrop ? (\n <ReactCrop\n className={`${baseClass}__reactCrop`}\n crop={crop}\n onChange={(_, c) => setCrop(c)}\n onComplete={() => setCheckBounds(true)}\n renderSelectionAddon={() => {\n return <div className={`${baseClass}__crop-window`} ref={cropRef} />\n }}\n >\n <img\n alt={t('upload:setCropArea')}\n onLoad={onImageLoad}\n ref={imageRef}\n src={fileSrcToUse}\n />\n </ReactCrop>\n ) : (\n <img\n alt={t('upload:setFocalPoint')}\n onLoad={onImageLoad}\n ref={imageRef}\n src={fileSrcToUse}\n />\n )}\n {showFocalPoint && (\n <DraggableElement\n boundsRef={showCrop ? cropRef : imageRef}\n checkBounds={showCrop ? checkBounds : false}\n className={`${baseClass}__focalPoint`}\n containerRef={focalWrapRef}\n initialPosition={focalPosition}\n onDragEnd={onDragEnd}\n setCheckBounds={showCrop ? setCheckBounds : false}\n >\n <PlusIcon />\n </DraggableElement>\n )}\n </div>\n </div>\n {(showCrop || showFocalPoint) && (\n <div className={`${baseClass}__sidebar`}>\n {showCrop && (\n <div className={`${baseClass}__groupWrap`}>\n <div>\n <div className={`${baseClass}__titleWrap`}>\n <h3>{t('upload:crop')}</h3>\n <Button\n buttonStyle=\"none\"\n className={`${baseClass}__reset`}\n onClick={() =>\n setCrop({\n height: 100,\n unit: '%',\n width: 100,\n x: 0,\n y: 0,\n })\n }\n >\n {t('general:reset')}\n </Button>\n </div>\n </div>\n <span className={`${baseClass}__description`}>\n {t('upload:cropToolDescription')}\n </span>\n <div className={`${baseClass}__inputsWrap`}>\n <Input\n name={`${t('upload:width')} (px)`}\n onChange={(value) => fineTuneCrop({ dimension: 'width', value })}\n ref={widthInputRef}\n value={((crop.width / 100) * uncroppedPixelWidth).toFixed(0)}\n />\n <Input\n name={`${t('upload:height')} (px)`}\n onChange={(value) => fineTuneCrop({ dimension: 'height', value })}\n ref={heightInputRef}\n value={((crop.height / 100) * uncroppedPixelHeight).toFixed(0)}\n />\n </div>\n </div>\n )}\n\n {showFocalPoint && (\n <div className={`${baseClass}__groupWrap`}>\n <div>\n <div className={`${baseClass}__titleWrap`}>\n <h3>{t('upload:focalPoint')}</h3>\n <Button\n buttonStyle=\"none\"\n className={`${baseClass}__reset`}\n onClick={centerFocalPoint}\n >\n {t('general:reset')}\n </Button>\n </div>\n </div>\n <span className={`${baseClass}__description`}>\n {t('upload:focalPointDescription')}\n </span>\n <div className={`${baseClass}__inputsWrap`}>\n <Input\n name=\"X %\"\n onChange={(value) => fineTuneFocalPosition({ coordinate: 'x', value })}\n value={focalPosition.x.toFixed(0)}\n />\n <Input\n name=\"Y %\"\n onChange={(value) => fineTuneFocalPosition({ coordinate: 'y', value })}\n value={focalPosition.y.toFixed(0)}\n />\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n )\n}\n\nconst DraggableElement = ({\n boundsRef,\n checkBounds,\n children,\n className,\n containerRef,\n initialPosition = { x: 50, y: 50 },\n onDragEnd,\n setCheckBounds,\n}) => {\n const [position, setPosition] = useState({ x: initialPosition.x, y: initialPosition.y })\n const [isDragging, setIsDragging] = useState(false)\n const dragRef = useRef<HTMLButtonElement | undefined>(undefined)\n\n const getCoordinates = React.useCallback(\n (mouseXArg?: number, mouseYArg?: number, recenter?: boolean) => {\n const containerRect = containerRef.current.getBoundingClientRect()\n const boundsRect = boundsRef.current.getBoundingClientRect()\n const mouseX = mouseXArg ?? boundsRect.left\n const mouseY = mouseYArg ?? boundsRect.top\n\n const xOutOfBounds = mouseX < boundsRect.left || mouseX > boundsRect.right\n const yOutOfBounds = mouseY < boundsRect.top || mouseY > boundsRect.bottom\n\n let x = ((mouseX - containerRect.left) / containerRect.width) * 100\n let y = ((mouseY - containerRect.top) / containerRect.height) * 100\n const xCenter =\n ((boundsRect.left - containerRect.left + boundsRect.width / 2) / containerRect.width) * 100\n const yCenter =\n ((boundsRect.top - containerRect.top + boundsRect.height / 2) / containerRect.height) * 100\n if (xOutOfBounds || yOutOfBounds) {\n setIsDragging(false)\n if (mouseX < boundsRect.left) {\n x = ((boundsRect.left - containerRect.left) / containerRect.width) * 100\n } else if (mouseX > boundsRect.right) {\n x =\n ((containerRect.width - (containerRect.right - boundsRect.right)) /\n containerRect.width) *\n 100\n }\n\n if (mouseY < boundsRect.top) {\n y = ((boundsRect.top - containerRect.top) / containerRect.height) * 100\n } else if (mouseY > boundsRect.bottom) {\n y =\n ((containerRect.height - (containerRect.bottom - boundsRect.bottom)) /\n containerRect.height) *\n 100\n }\n\n if (recenter) {\n x = xOutOfBounds ? xCenter : x\n y = yOutOfBounds ? yCenter : y\n }\n }\n\n return { x, y }\n },\n [boundsRef, containerRef],\n )\n\n const handleMouseDown = (event) => {\n event.preventDefault()\n setIsDragging(true)\n }\n\n const handleMouseMove = (event) => {\n if (!isDragging) {\n return null\n }\n const { x, y } = getCoordinates(event.clientX, event.clientY)\n\n setPosition({ x, y })\n }\n\n const onDrop = () => {\n setIsDragging(false)\n onDragEnd(position)\n }\n\n React.useEffect(() => {\n if (isDragging || !dragRef.current) {\n return\n }\n if (checkBounds) {\n const { height, left, top, width } = dragRef.current.getBoundingClientRect()\n const { x, y } = getCoordinates(left + width / 2, top + height / 2, true)\n onDragEnd({ x, y })\n setPosition({ x, y })\n setCheckBounds(false)\n return\n }\n }, [getCoordinates, isDragging, checkBounds, setCheckBounds, position.x, position.y, onDragEnd])\n\n React.useEffect(() => {\n setPosition({ x: initialPosition.x, y: initialPosition.y })\n }, [initialPosition.x, initialPosition.y])\n\n return (\n <div\n className={[\n `${baseClass}__draggable-container`,\n isDragging && `${baseClass}__draggable-container--dragging`,\n ]\n .filter(Boolean)\n .join(' ')}\n onMouseMove={handleMouseMove}\n >\n <button\n className={[`${baseClass}__draggable`, className].filter(Boolean).join(' ')}\n onMouseDown={handleMouseDown}\n onMouseUp={onDrop}\n ref={dragRef}\n style={{ left: `${position.x}%`, top: `${position.y}%` }}\n type=\"button\"\n >\n {children}\n </button>\n <div />\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Link/index.tsx"],"names":[],"mappings":"AACA,OAAO,cAAc,MAAM,cAAc,CAAA;AAEzC,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,QAAA,MAAM,QAAQ;eA4E+nF,MAAO,SAAS;2CA5EvkF,CAAA;AAgBtF,KAAK,KAAK,GAAG;IACX;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AAElC,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAkDhC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Link/index.tsx"],"names":[],"mappings":"AACA,OAAO,cAAc,MAAM,cAAc,CAAA;AAEzC,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,QAAA,MAAM,QAAQ;eA4E2pG,MAAO,SAAS;2CA5EnmG,CAAA;AAgBtF,KAAK,KAAK,GAAG;IACX;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AAElC,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAkDhC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/PreviewSizes/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,yBAAyB,EAAyB,MAAM,SAAS,CAAA;AAE/F,OAAO,KAAuC,MAAM,OAAO,CAAA;AAG3D,OAAO,cAAc,CAAA;AAIrB,KAAK,QAAQ,GAAG;IACd,GAAG,EAAE,MAAM,CAAA;CACZ,GAAG,QAAQ,CAAA;AACZ,KAAK,iBAAiB,GAAG;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAA;CACxB,CAAA;AA8DD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE;QACH,KAAK,CAAC,EAAE,iBAAiB,CAAA;KAC1B,GAAG,IAAI,CAAA;IACR,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAA;CAClD,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAqFpD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/PreviewSizes/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,yBAAyB,EAAyB,MAAM,SAAS,CAAA;AAE/F,OAAO,KAAuC,MAAM,OAAO,CAAA;AAG3D,OAAO,cAAc,CAAA;AAIrB,KAAK,QAAQ,GAAG;IACd,GAAG,EAAE,MAAM,CAAA;CACZ,GAAG,QAAQ,CAAA;AACZ,KAAK,iBAAiB,GAAG;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAA;CACxB,CAAA;AA8DD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE;QACH,KAAK,CAAC,EAAE,iBAAiB,CAAA;KAC1B,GAAG,IAAI,CAAA;IACR,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAA;CAClD,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAoFpD,CAAA"}
@@ -76,8 +76,7 @@ export const PreviewSizes = ({
76
76
  return null;
77
77
  }
78
78
  if (doc_0.url) {
79
- const queryChar = doc_0.url.includes('?') ? '&' : '?';
80
- return `${doc_0.url}${imageCacheTag ? `${queryChar}${encodeURIComponent(imageCacheTag)}` : ''}`;
79
+ return `${doc_0.url}${imageCacheTag ? `?${encodeURIComponent(imageCacheTag)}` : ''}`;
81
80
  }
82
81
  };
83
82
  useEffect(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","useEffect","useMemo","useState","FileMeta","baseClass","sortSizes","sizes","imageSizes","length","orderedSizes","forEach","name","PreviewSizeCard","active","alt","meta","onClick","previewSrc","_jsxs","className","filter","Boolean","join","undefined","onKeyDown","e","key","role","tabIndex","_jsx","src","PreviewSizes","doc","imageCacheTag","uploadConfig","filename","setOrderedSizes","selectedSize","setSelectedSize","generateImageUrl","url","queryChar","includes","encodeURIComponent","mainPreviewSrc","originalImage","filesize","height","mimeType","width","originalFilename","Object","entries","map","val","selected"],"sources":["../../../src/elements/PreviewSizes/index.tsx"],"sourcesContent":["'use client'\nimport type { Data, FileSize, SanitizedCollectionConfig, SanitizedUploadConfig } from 'payload'\n\nimport React, { useEffect, useMemo, useState } from 'react'\n\nimport { FileMeta } from '../FileDetails/FileMeta/index.js'\nimport './index.scss'\n\nconst baseClass = 'preview-sizes'\n\ntype FileInfo = {\n url: string\n} & FileSize\ntype FilesSizesWithUrl = {\n [key: string]: FileInfo\n}\n\nconst sortSizes = (sizes: FilesSizesWithUrl, imageSizes: SanitizedUploadConfig['imageSizes']) => {\n if (!imageSizes || imageSizes.length === 0) {\n return sizes\n }\n\n const orderedSizes: FilesSizesWithUrl = {}\n\n imageSizes.forEach(({ name }) => {\n if (sizes[name]) {\n orderedSizes[name] = sizes[name]\n }\n })\n\n return orderedSizes\n}\n\ntype PreviewSizeCardProps = {\n active: boolean\n alt: string\n meta: FileInfo\n name: string\n onClick?: () => void\n previewSrc: string\n}\nconst PreviewSizeCard: React.FC<PreviewSizeCardProps> = ({\n name,\n active,\n alt,\n meta,\n onClick,\n previewSrc,\n}) => {\n return (\n <div\n className={[`${baseClass}__sizeOption`, active && `${baseClass}--selected`]\n .filter(Boolean)\n .join(' ')}\n onClick={typeof onClick === 'function' ? onClick : undefined}\n onKeyDown={(e) => {\n if (typeof onClick !== 'function') {\n return\n }\n if (e.key === 'Enter') {\n onClick()\n }\n }}\n role=\"button\"\n tabIndex={0}\n >\n <div className={`${baseClass}__image`}>\n <img alt={alt} src={previewSrc} />\n </div>\n <div className={`${baseClass}__sizeMeta`}>\n <div className={`${baseClass}__sizeName`}>{name}</div>\n <FileMeta {...meta} />\n </div>\n </div>\n )\n}\n\nexport type PreviewSizesProps = {\n doc: {\n sizes?: FilesSizesWithUrl\n } & Data\n imageCacheTag?: string\n uploadConfig: SanitizedCollectionConfig['upload']\n}\n\nexport const PreviewSizes: React.FC<PreviewSizesProps> = ({ doc, imageCacheTag, uploadConfig }) => {\n const { imageSizes } = uploadConfig\n const { sizes } = doc\n\n const alt = (doc as { alt?: string })?.alt || doc.filename || ''\n\n const [orderedSizes, setOrderedSizes] = useState<FilesSizesWithUrl>(() =>\n sortSizes(sizes, imageSizes),\n )\n const [selectedSize, setSelectedSize] = useState<null | string>(null)\n\n const generateImageUrl = (doc) => {\n if (!doc.filename) {\n return null\n }\n if (doc.url) {\n const queryChar = doc.url.includes('?') ? '&' : '?'\n return `${doc.url}${imageCacheTag ? `${queryChar}${encodeURIComponent(imageCacheTag)}` : ''}`\n }\n }\n useEffect(() => {\n setOrderedSizes(sortSizes(sizes, imageSizes))\n }, [sizes, imageSizes, imageCacheTag])\n\n const mainPreviewSrc = selectedSize\n ? generateImageUrl(doc.sizes[selectedSize])\n : generateImageUrl(doc)\n\n const originalImage = useMemo(\n (): FileInfo => ({\n filename: doc.filename,\n filesize: doc.filesize,\n height: doc.height,\n mimeType: doc.mimeType,\n url: doc.url,\n width: doc.width,\n }),\n [doc],\n )\n const originalFilename = 'Original'\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__imageWrap`}>\n <div className={`${baseClass}__meta`}>\n <div className={`${baseClass}__sizeName`}>{selectedSize || originalFilename}</div>\n <FileMeta {...(selectedSize ? orderedSizes[selectedSize] : originalImage)} />\n </div>\n <img alt={alt} className={`${baseClass}__preview`} src={mainPreviewSrc} />\n </div>\n <div className={`${baseClass}__listWrap`}>\n <div className={`${baseClass}__list`}>\n <PreviewSizeCard\n active={!selectedSize}\n alt={alt}\n meta={originalImage}\n name={originalFilename}\n onClick={() => setSelectedSize(null)}\n previewSrc={generateImageUrl(doc)}\n />\n\n {Object.entries(orderedSizes).map(([key, val]) => {\n const selected = selectedSize === key\n const previewSrc = generateImageUrl(val)\n\n if (previewSrc) {\n return (\n <PreviewSizeCard\n active={selected}\n alt={alt}\n key={key}\n meta={val}\n name={key}\n onClick={() => setSelectedSize(key)}\n previewSrc={previewSrc}\n />\n )\n }\n\n return null\n })}\n </div>\n </div>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["React","useEffect","useMemo","useState","FileMeta","baseClass","sortSizes","sizes","imageSizes","length","orderedSizes","forEach","name","PreviewSizeCard","active","alt","meta","onClick","previewSrc","_jsxs","className","filter","Boolean","join","undefined","onKeyDown","e","key","role","tabIndex","_jsx","src","PreviewSizes","doc","imageCacheTag","uploadConfig","filename","setOrderedSizes","selectedSize","setSelectedSize","generateImageUrl","url","encodeURIComponent","mainPreviewSrc","originalImage","filesize","height","mimeType","width","originalFilename","Object","entries","map","val","selected"],"sources":["../../../src/elements/PreviewSizes/index.tsx"],"sourcesContent":["'use client'\nimport type { Data, FileSize, SanitizedCollectionConfig, SanitizedUploadConfig } from 'payload'\n\nimport React, { useEffect, useMemo, useState } from 'react'\n\nimport { FileMeta } from '../FileDetails/FileMeta/index.js'\nimport './index.scss'\n\nconst baseClass = 'preview-sizes'\n\ntype FileInfo = {\n url: string\n} & FileSize\ntype FilesSizesWithUrl = {\n [key: string]: FileInfo\n}\n\nconst sortSizes = (sizes: FilesSizesWithUrl, imageSizes: SanitizedUploadConfig['imageSizes']) => {\n if (!imageSizes || imageSizes.length === 0) {\n return sizes\n }\n\n const orderedSizes: FilesSizesWithUrl = {}\n\n imageSizes.forEach(({ name }) => {\n if (sizes[name]) {\n orderedSizes[name] = sizes[name]\n }\n })\n\n return orderedSizes\n}\n\ntype PreviewSizeCardProps = {\n active: boolean\n alt: string\n meta: FileInfo\n name: string\n onClick?: () => void\n previewSrc: string\n}\nconst PreviewSizeCard: React.FC<PreviewSizeCardProps> = ({\n name,\n active,\n alt,\n meta,\n onClick,\n previewSrc,\n}) => {\n return (\n <div\n className={[`${baseClass}__sizeOption`, active && `${baseClass}--selected`]\n .filter(Boolean)\n .join(' ')}\n onClick={typeof onClick === 'function' ? onClick : undefined}\n onKeyDown={(e) => {\n if (typeof onClick !== 'function') {\n return\n }\n if (e.key === 'Enter') {\n onClick()\n }\n }}\n role=\"button\"\n tabIndex={0}\n >\n <div className={`${baseClass}__image`}>\n <img alt={alt} src={previewSrc} />\n </div>\n <div className={`${baseClass}__sizeMeta`}>\n <div className={`${baseClass}__sizeName`}>{name}</div>\n <FileMeta {...meta} />\n </div>\n </div>\n )\n}\n\nexport type PreviewSizesProps = {\n doc: {\n sizes?: FilesSizesWithUrl\n } & Data\n imageCacheTag?: string\n uploadConfig: SanitizedCollectionConfig['upload']\n}\n\nexport const PreviewSizes: React.FC<PreviewSizesProps> = ({ doc, imageCacheTag, uploadConfig }) => {\n const { imageSizes } = uploadConfig\n const { sizes } = doc\n\n const alt = (doc as { alt?: string })?.alt || doc.filename || ''\n\n const [orderedSizes, setOrderedSizes] = useState<FilesSizesWithUrl>(() =>\n sortSizes(sizes, imageSizes),\n )\n const [selectedSize, setSelectedSize] = useState<null | string>(null)\n\n const generateImageUrl = (doc) => {\n if (!doc.filename) {\n return null\n }\n if (doc.url) {\n return `${doc.url}${imageCacheTag ? `?${encodeURIComponent(imageCacheTag)}` : ''}`\n }\n }\n useEffect(() => {\n setOrderedSizes(sortSizes(sizes, imageSizes))\n }, [sizes, imageSizes, imageCacheTag])\n\n const mainPreviewSrc = selectedSize\n ? generateImageUrl(doc.sizes[selectedSize])\n : generateImageUrl(doc)\n\n const originalImage = useMemo(\n (): FileInfo => ({\n filename: doc.filename,\n filesize: doc.filesize,\n height: doc.height,\n mimeType: doc.mimeType,\n url: doc.url,\n width: doc.width,\n }),\n [doc],\n )\n const originalFilename = 'Original'\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__imageWrap`}>\n <div className={`${baseClass}__meta`}>\n <div className={`${baseClass}__sizeName`}>{selectedSize || originalFilename}</div>\n <FileMeta {...(selectedSize ? orderedSizes[selectedSize] : originalImage)} />\n </div>\n <img alt={alt} className={`${baseClass}__preview`} src={mainPreviewSrc} />\n </div>\n <div className={`${baseClass}__listWrap`}>\n <div className={`${baseClass}__list`}>\n <PreviewSizeCard\n active={!selectedSize}\n alt={alt}\n meta={originalImage}\n name={originalFilename}\n onClick={() => setSelectedSize(null)}\n previewSrc={generateImageUrl(doc)}\n />\n\n {Object.entries(orderedSizes).map(([key, val]) => {\n const selected = selectedSize === key\n const previewSrc = generateImageUrl(val)\n\n if (previewSrc) {\n return (\n <PreviewSizeCard\n active={selected}\n alt={alt}\n key={key}\n meta={val}\n name={key}\n onClick={() => setSelectedSize(key)}\n previewSrc={previewSrc}\n />\n )\n }\n\n return null\n })}\n </div>\n </div>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/PublishButton/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAWvD,OAAO,KAA2C,MAAM,OAAO,CAAA;AAe/D,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EAAE,SAAS,GACjB,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,wBAA6B,qBAoSpD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/PublishButton/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAWvD,OAAO,KAA2C,MAAM,OAAO,CAAA;AAe/D,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EAAE,SAAS,GACjB,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,wBAA6B,qBAgTpD"}
@@ -189,9 +189,11 @@ export function PublishButton({
189
189
  }
190
190
  });
191
191
  if (result_0) {
192
+ setUnpublishedVersionCount(0);
193
+ setMostRecentVersionIsAutosaved(false);
192
194
  setHasPublishedDoc(true);
193
195
  }
194
- }, [api, collectionSlug, globalSlug, id, setHasPublishedDoc, submit, uploadStatus]);
196
+ }, [api, collectionSlug, globalSlug, id, setHasPublishedDoc, setMostRecentVersionIsAutosaved, setUnpublishedVersionCount, submit, uploadStatus]);
195
197
  // Publish to all locales unless there are localized fields AND defaultLocalePublishOption is 'active'
196
198
  const isDefaultPublishAll = !isSpecificLocalePublishEnabled || localization && localization?.defaultLocalePublishOption !== 'active';
197
199
  const activeLocale = localization && localization?.locales.find(locale_0 => typeof locale_0 === 'string' ? locale_0 === localeCode : locale_0.code === localeCode);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useModal","getTranslation","formatAdminURL","hasAutosaveEnabled","hasLocalizeStatusEnabled","hasScheduledPublishEnabled","qs","React","useCallback","useEffect","useState","useForm","useFormModified","FormSubmit","useHotkey","useConfig","useDocumentInfo","useEditDepth","useLocale","useOperation","useTranslation","traverseForLocalizedFields","PopupList","ScheduleDrawer","PublishButton","label","labelProp","id","collectionSlug","globalSlug","hasPublishedDoc","hasPublishPermission","setHasPublishedDoc","setMostRecentVersionIsAutosaved","setUnpublishedVersionCount","unpublishedVersionCount","uploadStatus","config","getEntityConfig","submit","modified","editDepth","code","localeCode","isModalOpen","toggleModal","drawerSlug","localization","routes","api","i18n","t","entityConfig","useMemo","hasNewerVersions","canPublish","scheduledPublishEnabled","hasAutosave","canSchedulePublish","Boolean","hasLocalizedFields","setHasLocalizedFields","hasLocalizedField","fields","isSpecificLocalePublishEnabled","operation","disabled","saveDraft","params","stringify","depth","draft","locale","addQueryPrefix","action","method","apiRoute","path","overrides","_status","skipValidation","cmdCtrlKey","keyCodes","e","preventDefault","stopPropagation","localizeStatusEnabled","publish","publishAllLocales","result","publishSpecificLocale","pathSegment","isDefaultPublishAll","defaultLocalePublishOption","activeLocale","locales","find","activeLocaleLabel","_jsxs","Fragment","_jsx","buttonId","enableSubMenu","onClick","size","SubMenuPopupContent","close","ButtonGroup","Button","undefined","type","defaultType","schedulePublishConfig","versions","drafts","schedulePublish","slug"],"sources":["../../../src/elements/PublishButton/index.tsx"],"sourcesContent":["'use client'\n\nimport type { PublishButtonClientProps } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n formatAdminURL,\n hasAutosaveEnabled,\n hasLocalizeStatusEnabled,\n hasScheduledPublishEnabled,\n} from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport { useForm, useFormModified } from '../../forms/Form/context.js'\nimport { FormSubmit } from '../../forms/Submit/index.js'\nimport { useHotkey } from '../../hooks/useHotkey.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useOperation } from '../../providers/Operation/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { traverseForLocalizedFields } from '../../utilities/traverseForLocalizedFields.js'\nimport { PopupList } from '../Popup/index.js'\nimport { ScheduleDrawer } from './ScheduleDrawer/index.js'\n\nexport function PublishButton({\n label: labelProp,\n}: { label?: string } & PublishButtonClientProps = {}) {\n const {\n id,\n collectionSlug,\n globalSlug,\n hasPublishedDoc,\n hasPublishPermission,\n setHasPublishedDoc,\n setMostRecentVersionIsAutosaved,\n setUnpublishedVersionCount,\n unpublishedVersionCount,\n uploadStatus,\n } = useDocumentInfo()\n\n const { config, getEntityConfig } = useConfig()\n const { submit } = useForm()\n const modified = useFormModified()\n const editDepth = useEditDepth()\n const { code: localeCode } = useLocale()\n const { isModalOpen, toggleModal } = useModal()\n\n const drawerSlug = `schedule-publish-${id}`\n\n const {\n localization,\n routes: { api },\n } = config\n\n const { i18n, t } = useTranslation()\n const label = labelProp || t('version:publishChanges')\n\n const entityConfig = React.useMemo(() => {\n if (collectionSlug) {\n return getEntityConfig({ collectionSlug })\n }\n\n if (globalSlug) {\n return getEntityConfig({ globalSlug })\n }\n }, [collectionSlug, globalSlug, getEntityConfig])\n\n const hasNewerVersions = unpublishedVersionCount > 0\n\n const canPublish =\n hasPublishPermission &&\n (modified || hasNewerVersions || !hasPublishedDoc) &&\n uploadStatus !== 'uploading'\n\n const scheduledPublishEnabled = hasScheduledPublishEnabled(entityConfig)\n\n // If autosave is enabled the modified will always be true so only conditionally check on modified state\n const hasAutosave = hasAutosaveEnabled(entityConfig)\n\n const canSchedulePublish = Boolean(\n scheduledPublishEnabled &&\n hasPublishPermission &&\n (globalSlug || (collectionSlug && id)) &&\n (hasAutosave || !modified),\n )\n\n const [hasLocalizedFields, setHasLocalizedFields] = useState(false)\n\n useEffect(() => {\n const hasLocalizedField = traverseForLocalizedFields(entityConfig?.fields)\n setHasLocalizedFields(hasLocalizedField)\n }, [entityConfig?.fields])\n\n const isSpecificLocalePublishEnabled = localization && hasLocalizedFields && hasPublishPermission\n\n const operation = useOperation()\n\n const disabled = operation === 'update' && !modified\n\n const saveDraft = useCallback(async () => {\n if (disabled) {\n return\n }\n\n const params = qs.stringify(\n {\n depth: 0,\n draft: true,\n 'fallback-locale': 'null',\n locale: localeCode,\n },\n { addQueryPrefix: true },\n )\n\n let action\n let method = 'POST'\n\n if (collectionSlug) {\n action = formatAdminURL({\n apiRoute: api,\n path: `/${collectionSlug}${id ? `/${id}` : ''}${params}`,\n })\n if (id) {\n method = 'PATCH'\n }\n }\n\n if (globalSlug) {\n action = formatAdminURL({\n apiRoute: api,\n path: `/globals/${globalSlug}${params}`,\n })\n }\n\n await submit({\n action,\n method,\n overrides: {\n _status: 'draft',\n },\n skipValidation: true,\n })\n }, [disabled, localeCode, collectionSlug, globalSlug, submit, api, id])\n\n useHotkey({ cmdCtrlKey: true, editDepth, keyCodes: ['s'] }, (e) => {\n e.preventDefault()\n e.stopPropagation()\n\n if (saveDraft && hasAutosave) {\n void saveDraft()\n }\n })\n\n const localizeStatusEnabled = hasLocalizeStatusEnabled(entityConfig)\n\n const publish = useCallback(async () => {\n if (uploadStatus === 'uploading') {\n return\n }\n\n const params = qs.stringify(\n {\n depth: 0,\n locale: localeCode,\n ...(localizeStatusEnabled && { publishAllLocales: true }),\n },\n { addQueryPrefix: true },\n )\n\n const action = formatAdminURL({\n apiRoute: api,\n path: `${\n globalSlug ? `/globals/${globalSlug}` : `/${collectionSlug}${id ? `/${id}` : ''}`\n }${params}` as `/${string}`,\n })\n\n const result = await submit({\n action,\n overrides: {\n _status: 'published',\n },\n })\n\n if (result) {\n setUnpublishedVersionCount(0)\n setMostRecentVersionIsAutosaved(false)\n setHasPublishedDoc(true)\n }\n }, [\n localeCode,\n localizeStatusEnabled,\n api,\n collectionSlug,\n globalSlug,\n id,\n setHasPublishedDoc,\n submit,\n setUnpublishedVersionCount,\n uploadStatus,\n setMostRecentVersionIsAutosaved,\n ])\n\n const publishSpecificLocale = useCallback(\n async (locale) => {\n if (uploadStatus === 'uploading') {\n return\n }\n\n const params = qs.stringify(\n {\n depth: 0,\n locale,\n publishSpecificLocale: locale,\n },\n { addQueryPrefix: true },\n )\n\n const pathSegment = globalSlug\n ? `/globals/${globalSlug}`\n : `/${collectionSlug}${id ? `/${id}` : ''}`\n const action = formatAdminURL({\n apiRoute: api,\n path: `${pathSegment}${params}` as `/${string}`,\n })\n\n const result = await submit({\n action,\n overrides: {\n _status: 'published',\n },\n })\n\n if (result) {\n setHasPublishedDoc(true)\n }\n },\n [api, collectionSlug, globalSlug, id, setHasPublishedDoc, submit, uploadStatus],\n )\n\n // Publish to all locales unless there are localized fields AND defaultLocalePublishOption is 'active'\n const isDefaultPublishAll =\n !isSpecificLocalePublishEnabled ||\n (localization && localization?.defaultLocalePublishOption !== 'active')\n\n const activeLocale =\n localization &&\n localization?.locales.find((locale) =>\n typeof locale === 'string' ? locale === localeCode : locale.code === localeCode,\n )\n\n const activeLocaleLabel = activeLocale && getTranslation(activeLocale.label, i18n)\n\n if (!hasPublishPermission) {\n return null\n }\n\n return (\n <React.Fragment>\n <FormSubmit\n buttonId=\"action-save\"\n disabled={!canPublish}\n enableSubMenu={canSchedulePublish}\n onClick={isDefaultPublishAll ? publish : () => publishSpecificLocale(activeLocale.code)}\n size=\"medium\"\n SubMenuPopupContent={\n isSpecificLocalePublishEnabled || canSchedulePublish\n ? ({ close }) => {\n return (\n <React.Fragment>\n {canSchedulePublish && (\n <PopupList.ButtonGroup key=\"schedule-publish\">\n <PopupList.Button\n id=\"schedule-publish\"\n onClick={() => [toggleModal(drawerSlug), close()]}\n >\n {t('version:schedulePublish')}\n </PopupList.Button>\n </PopupList.ButtonGroup>\n )}\n {isSpecificLocalePublishEnabled && (\n <PopupList.ButtonGroup>\n <PopupList.Button\n id=\"publish-locale\"\n onClick={\n isDefaultPublishAll\n ? () => publishSpecificLocale(activeLocale.code)\n : publish\n }\n >\n {isDefaultPublishAll\n ? t('version:publishIn', { locale: activeLocaleLabel })\n : t('version:publishAllLocales')}\n </PopupList.Button>\n </PopupList.ButtonGroup>\n )}\n </React.Fragment>\n )\n }\n : undefined\n }\n type=\"button\"\n >\n {!isDefaultPublishAll ? t('version:publishIn', { locale: activeLocaleLabel }) : label}\n </FormSubmit>\n {canSchedulePublish && isModalOpen(drawerSlug) && (\n <ScheduleDrawer\n defaultType={!hasNewerVersions ? 'unpublish' : 'publish'}\n schedulePublishConfig={\n scheduledPublishEnabled &&\n typeof entityConfig.versions.drafts.schedulePublish === 'object'\n ? entityConfig.versions.drafts.schedulePublish\n : undefined\n }\n slug={drawerSlug}\n />\n )}\n </React.Fragment>\n )\n}\n"],"mappings":"AAAA;;;AAIA,SAASA,QAAQ,QAAQ;AACzB,SAASC,cAAc,QAAQ;AAC/B,SACEC,cAAc,EACdC,kBAAkB,EAClBC,wBAAwB,EACxBC,0BAA0B,QACrB;AACP,YAAYC,EAAA,MAAQ;AACpB,OAAOC,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ;AAExD,SAASC,OAAO,EAAEC,eAAe,QAAQ;AACzC,SAASC,UAAU,QAAQ;AAC3B,SAASC,SAAS,QAAQ;AAC1B,SAASC,SAAS,QAAQ;AAC1B,SAASC,eAAe,QAAQ;AAChC,SAASC,YAAY,QAAQ;AAC7B,SAASC,SAAS,QAAQ;AAC1B,SAASC,YAAY,QAAQ;AAC7B,SAASC,cAAc,QAAQ;AAC/B,SAASC,0BAA0B,QAAQ;AAC3C,SAASC,SAAS,QAAQ;AAC1B,SAASC,cAAc,QAAQ;AAE/B,OAAO,SAASC,cAAc;EAC5BC,KAAA,EAAOC;AAAS,CAC8B,GAAG,CAAC,CAAC;EACnD,MAAM;IACJC,EAAE;IACFC,cAAc;IACdC,UAAU;IACVC,eAAe;IACfC,oBAAoB;IACpBC,kBAAkB;IAClBC,+BAA+B;IAC/BC,0BAA0B;IAC1BC,uBAAuB;IACvBC;EAAY,CACb,GAAGpB,eAAA;EAEJ,MAAM;IAAEqB,MAAM;IAAEC;EAAe,CAAE,GAAGvB,SAAA;EACpC,MAAM;IAAEwB;EAAM,CAAE,GAAG5B,OAAA;EACnB,MAAM6B,QAAA,GAAW5B,eAAA;EACjB,MAAM6B,SAAA,GAAYxB,YAAA;EAClB,MAAM;IAAEyB,IAAA,EAAMC;EAAU,CAAE,GAAGzB,SAAA;EAC7B,MAAM;IAAE0B,WAAW;IAAEC;EAAW,CAAE,GAAG7C,QAAA;EAErC,MAAM8C,UAAA,GAAa,oBAAoBnB,EAAA,EAAI;EAE3C,MAAM;IACJoB,YAAY;IACZC,MAAA,EAAQ;MAAEC;IAAG;EAAE,CAChB,GAAGZ,MAAA;EAEJ,MAAM;IAAEa,IAAI;IAAEC;EAAC,CAAE,GAAG/B,cAAA;EACpB,MAAMK,KAAA,GAAQC,SAAA,IAAayB,CAAA,CAAE;EAE7B,MAAMC,YAAA,GAAe7C,KAAA,CAAM8C,OAAO,CAAC;IACjC,IAAIzB,cAAA,EAAgB;MAClB,OAAOU,eAAA,CAAgB;QAAEV;MAAe;IAC1C;IAEA,IAAIC,UAAA,EAAY;MACd,OAAOS,eAAA,CAAgB;QAAET;MAAW;IACtC;EACF,GAAG,CAACD,cAAA,EAAgBC,UAAA,EAAYS,eAAA,CAAgB;EAEhD,MAAMgB,gBAAA,GAAmBnB,uBAAA,GAA0B;EAEnD,MAAMoB,UAAA,GACJxB,oBAAA,KACCS,QAAA,IAAYc,gBAAA,IAAoB,CAACxB,eAAc,KAChDM,YAAA,KAAiB;EAEnB,MAAMoB,uBAAA,GAA0BnD,0BAAA,CAA2B+C,YAAA;EAE3D;EACA,MAAMK,WAAA,GAActD,kBAAA,CAAmBiD,YAAA;EAEvC,MAAMM,kBAAA,GAAqBC,OAAA,CACzBH,uBAAA,IACEzB,oBAAA,KACCF,UAAA,IAAeD,cAAA,IAAkBD,EAAE,MACnC8B,WAAA,IAAe,CAACjB,QAAO;EAG5B,MAAM,CAACoB,kBAAA,EAAoBC,qBAAA,CAAsB,GAAGnD,QAAA,CAAS;EAE7DD,SAAA,CAAU;IACR,MAAMqD,iBAAA,GAAoBzC,0BAAA,CAA2B+B,YAAA,EAAcW,MAAA;IACnEF,qBAAA,CAAsBC,iBAAA;EACxB,GAAG,CAACV,YAAA,EAAcW,MAAA,CAAO;EAEzB,MAAMC,8BAAA,GAAiCjB,YAAA,IAAgBa,kBAAA,IAAsB7B,oBAAA;EAE7E,MAAMkC,SAAA,GAAY9C,YAAA;EAElB,MAAM+C,QAAA,GAAWD,SAAA,KAAc,YAAY,CAACzB,QAAA;EAE5C,MAAM2B,SAAA,GAAY3D,WAAA,CAAY;IAC5B,IAAI0D,QAAA,EAAU;MACZ;IACF;IAEA,MAAME,MAAA,GAAS9D,EAAA,CAAG+D,SAAS,CACzB;MACEC,KAAA,EAAO;MACPC,KAAA,EAAO;MACP,mBAAmB;MACnBC,MAAA,EAAQ7B;IACV,GACA;MAAE8B,cAAA,EAAgB;IAAK;IAGzB,IAAIC,MAAA;IACJ,IAAIC,MAAA,GAAS;IAEb,IAAI/C,cAAA,EAAgB;MAClB8C,MAAA,GAASxE,cAAA,CAAe;QACtB0E,QAAA,EAAU3B,GAAA;QACV4B,IAAA,EAAM,IAAIjD,cAAA,GAAiBD,EAAA,GAAK,IAAIA,EAAA,EAAI,GAAG,KAAKyC,MAAA;MAClD;MACA,IAAIzC,EAAA,EAAI;QACNgD,MAAA,GAAS;MACX;IACF;IAEA,IAAI9C,UAAA,EAAY;MACd6C,MAAA,GAASxE,cAAA,CAAe;QACtB0E,QAAA,EAAU3B,GAAA;QACV4B,IAAA,EAAM,YAAYhD,UAAA,GAAauC,MAAA;MACjC;IACF;IAEA,MAAM7B,MAAA,CAAO;MACXmC,MAAA;MACAC,MAAA;MACAG,SAAA,EAAW;QACTC,OAAA,EAAS;MACX;MACAC,cAAA,EAAgB;IAClB;EACF,GAAG,CAACd,QAAA,EAAUvB,UAAA,EAAYf,cAAA,EAAgBC,UAAA,EAAYU,MAAA,EAAQU,GAAA,EAAKtB,EAAA,CAAG;EAEtEb,SAAA,CAAU;IAAEmE,UAAA,EAAY;IAAMxC,SAAA;IAAWyC,QAAA,EAAU,CAAC;EAAK,GAAIC,CAAA;IAC3DA,CAAA,CAAEC,cAAc;IAChBD,CAAA,CAAEE,eAAe;IAEjB,IAAIlB,SAAA,IAAaV,WAAA,EAAa;MAC5B,KAAKU,SAAA;IACP;EACF;EAEA,MAAMmB,qBAAA,GAAwBlF,wBAAA,CAAyBgD,YAAA;EAEvD,MAAMmC,OAAA,GAAU/E,WAAA,CAAY;IAC1B,IAAI4B,YAAA,KAAiB,aAAa;MAChC;IACF;IAEA,MAAMgC,QAAA,GAAS9D,EAAA,CAAG+D,SAAS,CACzB;MACEC,KAAA,EAAO;MACPE,MAAA,EAAQ7B,UAAA;MACR,IAAI2C,qBAAA,IAAyB;QAAEE,iBAAA,EAAmB;MAAK,CAAC;IAC1D,GACA;MAAEf,cAAA,EAAgB;IAAK;IAGzB,MAAMC,QAAA,GAASxE,cAAA,CAAe;MAC5B0E,QAAA,EAAU3B,GAAA;MACV4B,IAAA,EAAM,GACJhD,UAAA,GAAa,YAAYA,UAAA,EAAY,GAAG,IAAID,cAAA,GAAiBD,EAAA,GAAK,IAAIA,EAAA,EAAI,GAAG,IAAI,GAChFyC,QAAA;IACL;IAEA,MAAMqB,MAAA,GAAS,MAAMlD,MAAA,CAAO;MAC1BmC,MAAA,EAAAA,QAAA;MACAI,SAAA,EAAW;QACTC,OAAA,EAAS;MACX;IACF;IAEA,IAAIU,MAAA,EAAQ;MACVvD,0BAAA,CAA2B;MAC3BD,+BAAA,CAAgC;MAChCD,kBAAA,CAAmB;IACrB;EACF,GAAG,CACDW,UAAA,EACA2C,qBAAA,EACArC,GAAA,EACArB,cAAA,EACAC,UAAA,EACAF,EAAA,EACAK,kBAAA,EACAO,MAAA,EACAL,0BAAA,EACAE,YAAA,EACAH,+BAAA,CACD;EAED,MAAMyD,qBAAA,GAAwBlF,WAAA,CAC5B,MAAOgE,MAAA;IACL,IAAIpC,YAAA,KAAiB,aAAa;MAChC;IACF;IAEA,MAAMgC,QAAA,GAAS9D,EAAA,CAAG+D,SAAS,CACzB;MACEC,KAAA,EAAO;MACPE,MAAA;MACAkB,qBAAA,EAAuBlB;IACzB,GACA;MAAEC,cAAA,EAAgB;IAAK;IAGzB,MAAMkB,WAAA,GAAc9D,UAAA,GAChB,YAAYA,UAAA,EAAY,GACxB,IAAID,cAAA,GAAiBD,EAAA,GAAK,IAAIA,EAAA,EAAI,GAAG,IAAI;IAC7C,MAAM+C,QAAA,GAASxE,cAAA,CAAe;MAC5B0E,QAAA,EAAU3B,GAAA;MACV4B,IAAA,EAAM,GAAGc,WAAA,GAAcvB,QAAA;IACzB;IAEA,MAAMqB,QAAA,GAAS,MAAMlD,MAAA,CAAO;MAC1BmC,MAAA,EAAAA,QAAA;MACAI,SAAA,EAAW;QACTC,OAAA,EAAS;MACX;IACF;IAEA,IAAIU,QAAA,EAAQ;MACVzD,kBAAA,CAAmB;IACrB;EACF,GACA,CAACiB,GAAA,EAAKrB,cAAA,EAAgBC,UAAA,EAAYF,EAAA,EAAIK,kBAAA,EAAoBO,MAAA,EAAQH,YAAA,CAAa;EAGjF;EACA,MAAMwD,mBAAA,GACJ,CAAC5B,8BAAA,IACAjB,YAAA,IAAgBA,YAAA,EAAc8C,0BAAA,KAA+B;EAEhE,MAAMC,YAAA,GACJ/C,YAAA,IACAA,YAAA,EAAcgD,OAAA,CAAQC,IAAA,CAAMxB,QAAA,IAC1B,OAAOA,QAAA,KAAW,WAAWA,QAAA,KAAW7B,UAAA,GAAa6B,QAAA,CAAO9B,IAAI,KAAKC,UAAA;EAGzE,MAAMsD,iBAAA,GAAoBH,YAAA,IAAgB7F,cAAA,CAAe6F,YAAA,CAAarE,KAAK,EAAEyB,IAAA;EAE7E,IAAI,CAACnB,oBAAA,EAAsB;IACzB,OAAO;EACT;EAEA,oBACEmE,KAAA,CAAC3F,KAAA,CAAM4F,QAAQ;4BACbC,IAAA,CAACvF,UAAA;MACCwF,QAAA,EAAS;MACTnC,QAAA,EAAU,CAACX,UAAA;MACX+C,aAAA,EAAe5C,kBAAA;MACf6C,OAAA,EAASX,mBAAA,GAAsBL,OAAA,GAAU,MAAMG,qBAAA,CAAsBI,YAAA,CAAapD,IAAI;MACtF8D,IAAA,EAAK;MACLC,mBAAA,EACEzC,8BAAA,IAAkCN,kBAAA,GAC9B,CAAC;QAAEgD;MAAK,CAAE;QACR,oBACER,KAAA,CAAC3F,KAAA,CAAM4F,QAAQ;qBACZzC,kBAAA,iBACC0C,IAAA,CAAC9E,SAAA,CAAUqF,WAAW;sBACpB,aAAAP,IAAA,CAAC9E,SAAA,CAAUsF,MAAM;cACfjF,EAAA,EAAG;cACH4E,OAAA,EAASA,CAAA,KAAM,CAAC1D,WAAA,CAAYC,UAAA,GAAa4D,KAAA,GAAQ;wBAEhDvD,CAAA,CAAE;;aALoB,qBAS5Ba,8BAAA,iBACCoC,IAAA,CAAC9E,SAAA,CAAUqF,WAAW;sBACpB,aAAAP,IAAA,CAAC9E,SAAA,CAAUsF,MAAM;cACfjF,EAAA,EAAG;cACH4E,OAAA,EACEX,mBAAA,GACI,MAAMF,qBAAA,CAAsBI,YAAA,CAAapD,IAAI,IAC7C6C,OAAA;wBAGLK,mBAAA,GACGzC,CAAA,CAAE,qBAAqB;gBAAEqB,MAAA,EAAQyB;cAAkB,KACnD9C,CAAA,CAAE;;;;MAMlB,IACA0D,SAAA;MAENC,IAAA,EAAK;gBAEJ,CAAClB,mBAAA,GAAsBzC,CAAA,CAAE,qBAAqB;QAAEqB,MAAA,EAAQyB;MAAkB,KAAKxE;QAEjFiC,kBAAA,IAAsBd,WAAA,CAAYE,UAAA,kBACjCsD,IAAA,CAAC7E,cAAA;MACCwF,WAAA,EAAa,CAACzD,gBAAA,GAAmB,cAAc;MAC/C0D,qBAAA,EACExD,uBAAA,IACA,OAAOJ,YAAA,CAAa6D,QAAQ,CAACC,MAAM,CAACC,eAAe,KAAK,WACpD/D,YAAA,CAAa6D,QAAQ,CAACC,MAAM,CAACC,eAAe,GAC5CN,SAAA;MAENO,IAAA,EAAMtE;;;AAKhB","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useModal","getTranslation","formatAdminURL","hasAutosaveEnabled","hasLocalizeStatusEnabled","hasScheduledPublishEnabled","qs","React","useCallback","useEffect","useState","useForm","useFormModified","FormSubmit","useHotkey","useConfig","useDocumentInfo","useEditDepth","useLocale","useOperation","useTranslation","traverseForLocalizedFields","PopupList","ScheduleDrawer","PublishButton","label","labelProp","id","collectionSlug","globalSlug","hasPublishedDoc","hasPublishPermission","setHasPublishedDoc","setMostRecentVersionIsAutosaved","setUnpublishedVersionCount","unpublishedVersionCount","uploadStatus","config","getEntityConfig","submit","modified","editDepth","code","localeCode","isModalOpen","toggleModal","drawerSlug","localization","routes","api","i18n","t","entityConfig","useMemo","hasNewerVersions","canPublish","scheduledPublishEnabled","hasAutosave","canSchedulePublish","Boolean","hasLocalizedFields","setHasLocalizedFields","hasLocalizedField","fields","isSpecificLocalePublishEnabled","operation","disabled","saveDraft","params","stringify","depth","draft","locale","addQueryPrefix","action","method","apiRoute","path","overrides","_status","skipValidation","cmdCtrlKey","keyCodes","e","preventDefault","stopPropagation","localizeStatusEnabled","publish","publishAllLocales","result","publishSpecificLocale","pathSegment","isDefaultPublishAll","defaultLocalePublishOption","activeLocale","locales","find","activeLocaleLabel","_jsxs","Fragment","_jsx","buttonId","enableSubMenu","onClick","size","SubMenuPopupContent","close","ButtonGroup","Button","undefined","type","defaultType","schedulePublishConfig","versions","drafts","schedulePublish","slug"],"sources":["../../../src/elements/PublishButton/index.tsx"],"sourcesContent":["'use client'\n\nimport type { PublishButtonClientProps } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n formatAdminURL,\n hasAutosaveEnabled,\n hasLocalizeStatusEnabled,\n hasScheduledPublishEnabled,\n} from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport { useForm, useFormModified } from '../../forms/Form/context.js'\nimport { FormSubmit } from '../../forms/Submit/index.js'\nimport { useHotkey } from '../../hooks/useHotkey.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useOperation } from '../../providers/Operation/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { traverseForLocalizedFields } from '../../utilities/traverseForLocalizedFields.js'\nimport { PopupList } from '../Popup/index.js'\nimport { ScheduleDrawer } from './ScheduleDrawer/index.js'\n\nexport function PublishButton({\n label: labelProp,\n}: { label?: string } & PublishButtonClientProps = {}) {\n const {\n id,\n collectionSlug,\n globalSlug,\n hasPublishedDoc,\n hasPublishPermission,\n setHasPublishedDoc,\n setMostRecentVersionIsAutosaved,\n setUnpublishedVersionCount,\n unpublishedVersionCount,\n uploadStatus,\n } = useDocumentInfo()\n\n const { config, getEntityConfig } = useConfig()\n const { submit } = useForm()\n const modified = useFormModified()\n const editDepth = useEditDepth()\n const { code: localeCode } = useLocale()\n const { isModalOpen, toggleModal } = useModal()\n\n const drawerSlug = `schedule-publish-${id}`\n\n const {\n localization,\n routes: { api },\n } = config\n\n const { i18n, t } = useTranslation()\n const label = labelProp || t('version:publishChanges')\n\n const entityConfig = React.useMemo(() => {\n if (collectionSlug) {\n return getEntityConfig({ collectionSlug })\n }\n\n if (globalSlug) {\n return getEntityConfig({ globalSlug })\n }\n }, [collectionSlug, globalSlug, getEntityConfig])\n\n const hasNewerVersions = unpublishedVersionCount > 0\n\n const canPublish =\n hasPublishPermission &&\n (modified || hasNewerVersions || !hasPublishedDoc) &&\n uploadStatus !== 'uploading'\n\n const scheduledPublishEnabled = hasScheduledPublishEnabled(entityConfig)\n\n // If autosave is enabled the modified will always be true so only conditionally check on modified state\n const hasAutosave = hasAutosaveEnabled(entityConfig)\n\n const canSchedulePublish = Boolean(\n scheduledPublishEnabled &&\n hasPublishPermission &&\n (globalSlug || (collectionSlug && id)) &&\n (hasAutosave || !modified),\n )\n\n const [hasLocalizedFields, setHasLocalizedFields] = useState(false)\n\n useEffect(() => {\n const hasLocalizedField = traverseForLocalizedFields(entityConfig?.fields)\n setHasLocalizedFields(hasLocalizedField)\n }, [entityConfig?.fields])\n\n const isSpecificLocalePublishEnabled = localization && hasLocalizedFields && hasPublishPermission\n\n const operation = useOperation()\n\n const disabled = operation === 'update' && !modified\n\n const saveDraft = useCallback(async () => {\n if (disabled) {\n return\n }\n\n const params = qs.stringify(\n {\n depth: 0,\n draft: true,\n 'fallback-locale': 'null',\n locale: localeCode,\n },\n { addQueryPrefix: true },\n )\n\n let action\n let method = 'POST'\n\n if (collectionSlug) {\n action = formatAdminURL({\n apiRoute: api,\n path: `/${collectionSlug}${id ? `/${id}` : ''}${params}`,\n })\n if (id) {\n method = 'PATCH'\n }\n }\n\n if (globalSlug) {\n action = formatAdminURL({\n apiRoute: api,\n path: `/globals/${globalSlug}${params}`,\n })\n }\n\n await submit({\n action,\n method,\n overrides: {\n _status: 'draft',\n },\n skipValidation: true,\n })\n }, [disabled, localeCode, collectionSlug, globalSlug, submit, api, id])\n\n useHotkey({ cmdCtrlKey: true, editDepth, keyCodes: ['s'] }, (e) => {\n e.preventDefault()\n e.stopPropagation()\n\n if (saveDraft && hasAutosave) {\n void saveDraft()\n }\n })\n\n const localizeStatusEnabled = hasLocalizeStatusEnabled(entityConfig)\n\n const publish = useCallback(async () => {\n if (uploadStatus === 'uploading') {\n return\n }\n\n const params = qs.stringify(\n {\n depth: 0,\n locale: localeCode,\n ...(localizeStatusEnabled && { publishAllLocales: true }),\n },\n { addQueryPrefix: true },\n )\n\n const action = formatAdminURL({\n apiRoute: api,\n path: `${\n globalSlug ? `/globals/${globalSlug}` : `/${collectionSlug}${id ? `/${id}` : ''}`\n }${params}` as `/${string}`,\n })\n\n const result = await submit({\n action,\n overrides: {\n _status: 'published',\n },\n })\n\n if (result) {\n setUnpublishedVersionCount(0)\n setMostRecentVersionIsAutosaved(false)\n setHasPublishedDoc(true)\n }\n }, [\n localeCode,\n localizeStatusEnabled,\n api,\n collectionSlug,\n globalSlug,\n id,\n setHasPublishedDoc,\n submit,\n setUnpublishedVersionCount,\n uploadStatus,\n setMostRecentVersionIsAutosaved,\n ])\n\n const publishSpecificLocale = useCallback(\n async (locale) => {\n if (uploadStatus === 'uploading') {\n return\n }\n\n const params = qs.stringify(\n {\n depth: 0,\n locale,\n publishSpecificLocale: locale,\n },\n { addQueryPrefix: true },\n )\n\n const pathSegment = globalSlug\n ? `/globals/${globalSlug}`\n : `/${collectionSlug}${id ? `/${id}` : ''}`\n const action = formatAdminURL({\n apiRoute: api,\n path: `${pathSegment}${params}` as `/${string}`,\n })\n\n const result = await submit({\n action,\n overrides: {\n _status: 'published',\n },\n })\n\n if (result) {\n setUnpublishedVersionCount(0)\n setMostRecentVersionIsAutosaved(false)\n setHasPublishedDoc(true)\n }\n },\n [\n api,\n collectionSlug,\n globalSlug,\n id,\n setHasPublishedDoc,\n setMostRecentVersionIsAutosaved,\n setUnpublishedVersionCount,\n submit,\n uploadStatus,\n ],\n )\n\n // Publish to all locales unless there are localized fields AND defaultLocalePublishOption is 'active'\n const isDefaultPublishAll =\n !isSpecificLocalePublishEnabled ||\n (localization && localization?.defaultLocalePublishOption !== 'active')\n\n const activeLocale =\n localization &&\n localization?.locales.find((locale) =>\n typeof locale === 'string' ? locale === localeCode : locale.code === localeCode,\n )\n\n const activeLocaleLabel = activeLocale && getTranslation(activeLocale.label, i18n)\n\n if (!hasPublishPermission) {\n return null\n }\n\n return (\n <React.Fragment>\n <FormSubmit\n buttonId=\"action-save\"\n disabled={!canPublish}\n enableSubMenu={canSchedulePublish}\n onClick={isDefaultPublishAll ? publish : () => publishSpecificLocale(activeLocale.code)}\n size=\"medium\"\n SubMenuPopupContent={\n isSpecificLocalePublishEnabled || canSchedulePublish\n ? ({ close }) => {\n return (\n <React.Fragment>\n {canSchedulePublish && (\n <PopupList.ButtonGroup key=\"schedule-publish\">\n <PopupList.Button\n id=\"schedule-publish\"\n onClick={() => [toggleModal(drawerSlug), close()]}\n >\n {t('version:schedulePublish')}\n </PopupList.Button>\n </PopupList.ButtonGroup>\n )}\n {isSpecificLocalePublishEnabled && (\n <PopupList.ButtonGroup>\n <PopupList.Button\n id=\"publish-locale\"\n onClick={\n isDefaultPublishAll\n ? () => publishSpecificLocale(activeLocale.code)\n : publish\n }\n >\n {isDefaultPublishAll\n ? t('version:publishIn', { locale: activeLocaleLabel })\n : t('version:publishAllLocales')}\n </PopupList.Button>\n </PopupList.ButtonGroup>\n )}\n </React.Fragment>\n )\n }\n : undefined\n }\n type=\"button\"\n >\n {!isDefaultPublishAll ? t('version:publishIn', { locale: activeLocaleLabel }) : label}\n </FormSubmit>\n {canSchedulePublish && isModalOpen(drawerSlug) && (\n <ScheduleDrawer\n defaultType={!hasNewerVersions ? 'unpublish' : 'publish'}\n schedulePublishConfig={\n scheduledPublishEnabled &&\n typeof entityConfig.versions.drafts.schedulePublish === 'object'\n ? entityConfig.versions.drafts.schedulePublish\n : undefined\n }\n slug={drawerSlug}\n />\n )}\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/ReactSelect/MultiValue/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAEnD,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGzC,OAAO,cAAc,CAAA;AAIrB,wBAAgB,6BAA6B,CAAC,UAAU,KAAA,EAAE,aAAa,KAAA,OAEtE;AACD,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAwDxD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/ReactSelect/MultiValue/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAEnD,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGzC,OAAO,cAAc,CAAA;AAIrB,wBAAgB,6BAA6B,CAAC,UAAU,KAAA,EAAE,aAAa,KAAA,OAEtE;AACD,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAgExD,CAAA"}
@@ -11,7 +11,7 @@ export function generateMultiValueDraggableID(optionData, valueFunction) {
11
11
  return typeof valueFunction === 'function' ? valueFunction(optionData) : optionData?.value;
12
12
  }
13
13
  export const MultiValue = props => {
14
- const $ = _c(26);
14
+ const $ = _c(24);
15
15
  const {
16
16
  className,
17
17
  data,
@@ -88,18 +88,10 @@ export const MultiValue = props => {
88
88
  const classes = t9.join(" ");
89
89
  let t10;
90
90
  if ($[14] !== attributes || $[15] !== classes || $[16] !== disableMouseDown || $[17] !== innerProps || $[18] !== isSortable || $[19] !== listeners || $[20] !== props || $[21] !== setNodeRef || $[22] !== transform) {
91
- let t11;
92
- if ($[24] !== disableMouseDown) {
93
- t11 = e => {
94
- if (!disableMouseDown) {
95
- e.stopPropagation();
96
- }
97
- };
98
- $[24] = disableMouseDown;
99
- $[25] = t11;
100
- } else {
101
- t11 = $[25];
102
- }
91
+ const {
92
+ onMouseDown: listenersMouseDown,
93
+ ...restListeners
94
+ } = listeners || {};
103
95
  t10 = _jsx(React.Fragment, {
104
96
  children: _jsx(SelectComponents.MultiValue, {
105
97
  ...props,
@@ -107,10 +99,17 @@ export const MultiValue = props => {
107
99
  innerProps: {
108
100
  ...(isSortable ? {
109
101
  ...attributes,
110
- ...listeners
102
+ ...restListeners
111
103
  } : {}),
112
104
  ...innerProps,
113
- onMouseDown: t11,
105
+ onMouseDown: e => {
106
+ if (isSortable && listenersMouseDown) {
107
+ listenersMouseDown(e);
108
+ }
109
+ if (!disableMouseDown) {
110
+ e.stopPropagation();
111
+ }
112
+ },
114
113
  ref: setNodeRef,
115
114
  style: isSortable ? {
116
115
  transform,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","React","components","SelectComponents","useDraggableSortable","baseClass","generateMultiValueDraggableID","optionData","valueFunction","value","MultiValue","props","$","className","data","innerProps","isDisabled","selectProps","t0","t1","undefined","customProps","t2","getOptionValue","isSortable","t3","disableMouseDown","t4","id","t5","t6","disabled","attributes","isDragging","listeners","setNodeRef","transform","t7","t8","t9","filter","Boolean","classes","join","t10","t11","e","stopPropagation","_jsx","Fragment","children","onMouseDown","ref","style"],"sources":["../../../../src/elements/ReactSelect/MultiValue/index.tsx"],"sourcesContent":["'use client'\nimport type { MultiValueProps } from 'react-select'\n\nimport React from 'react'\nimport { components as SelectComponents } from 'react-select'\n\nimport type { Option } from '../types.js'\n\nimport { useDraggableSortable } from '../../DraggableSortable/useDraggableSortable/index.js'\nimport './index.scss'\n\nconst baseClass = 'multi-value'\n\nexport function generateMultiValueDraggableID(optionData, valueFunction) {\n return typeof valueFunction === 'function' ? valueFunction(optionData) : optionData?.value\n}\nexport const MultiValue: React.FC<MultiValueProps<Option>> = (props) => {\n const {\n className,\n data,\n innerProps,\n isDisabled,\n // @ts-expect-error // TODO Fix this - moduleResolution 16 breaks our declare module\n selectProps: { customProps: { disableMouseDown } = {}, getOptionValue, isSortable } = {},\n } = props\n\n const id = generateMultiValueDraggableID(data, getOptionValue)\n\n const { attributes, isDragging, listeners, setNodeRef, transform } = useDraggableSortable({\n id,\n disabled: !isSortable,\n })\n\n const classes = [\n baseClass,\n className,\n !isDisabled && isSortable && 'draggable',\n isDragging && `${baseClass}--is-dragging`,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <React.Fragment>\n <SelectComponents.MultiValue\n {...props}\n className={classes}\n innerProps={{\n ...(isSortable\n ? {\n ...attributes,\n ...listeners,\n }\n : {}),\n ...innerProps,\n onMouseDown: (e) => {\n if (!disableMouseDown) {\n // we need to prevent the dropdown from opening when clicking on the drag handle, but not when a modal is open (i.e. the 'Relationship' field component)\n e.stopPropagation()\n }\n },\n ref: setNodeRef,\n style: isSortable\n ? {\n transform,\n ...attributes?.style,\n }\n : {},\n }}\n />\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","React","components","SelectComponents","useDraggableSortable","baseClass","generateMultiValueDraggableID","optionData","valueFunction","value","MultiValue","props","$","className","data","innerProps","isDisabled","selectProps","t0","t1","undefined","customProps","t2","getOptionValue","isSortable","t3","disableMouseDown","t4","id","t5","t6","disabled","attributes","isDragging","listeners","setNodeRef","transform","t7","t8","t9","filter","Boolean","classes","join","t10","onMouseDown","listenersMouseDown","restListeners","_jsx","Fragment","children","e","stopPropagation","ref","style"],"sources":["../../../../src/elements/ReactSelect/MultiValue/index.tsx"],"sourcesContent":["'use client'\nimport type { MultiValueProps } from 'react-select'\n\nimport React from 'react'\nimport { components as SelectComponents } from 'react-select'\n\nimport type { Option } from '../types.js'\n\nimport { useDraggableSortable } from '../../DraggableSortable/useDraggableSortable/index.js'\nimport './index.scss'\n\nconst baseClass = 'multi-value'\n\nexport function generateMultiValueDraggableID(optionData, valueFunction) {\n return typeof valueFunction === 'function' ? valueFunction(optionData) : optionData?.value\n}\nexport const MultiValue: React.FC<MultiValueProps<Option>> = (props) => {\n const {\n className,\n data,\n innerProps,\n isDisabled,\n // @ts-expect-error // TODO Fix this - moduleResolution 16 breaks our declare module\n selectProps: { customProps: { disableMouseDown } = {}, getOptionValue, isSortable } = {},\n } = props\n\n const id = generateMultiValueDraggableID(data, getOptionValue)\n\n const { attributes, isDragging, listeners, setNodeRef, transform } = useDraggableSortable({\n id,\n disabled: !isSortable,\n })\n\n const classes = [\n baseClass,\n className,\n !isDisabled && isSortable && 'draggable',\n isDragging && `${baseClass}--is-dragging`,\n ]\n .filter(Boolean)\n .join(' ')\n\n // Extract onMouseDown from listeners to preserve the MouseSensor handler\n const { onMouseDown: listenersMouseDown, ...restListeners } = listeners || {}\n\n return (\n <React.Fragment>\n <SelectComponents.MultiValue\n {...props}\n className={classes}\n innerProps={{\n ...(isSortable\n ? {\n ...attributes,\n ...restListeners,\n }\n : {}),\n ...innerProps,\n onMouseDown: (e) => {\n // Call the MouseSensor's handler first to enable mouse dragging\n if (isSortable && listenersMouseDown) {\n listenersMouseDown(e)\n }\n\n if (!disableMouseDown) {\n // we need to prevent the dropdown from opening when clicking on the drag handle, but not when a modal is open (i.e. the 'Relationship' field component)\n e.stopPropagation()\n }\n },\n ref: setNodeRef,\n style: isSortable\n ? {\n transform,\n ...attributes?.style,\n }\n : {},\n }}\n />\n </React.Fragment>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,OAAOC,KAAA,MAAW;AAClB,SAASC,UAAA,IAAcC,gBAAgB,QAAQ;AAI/C,SAASC,oBAAoB,QAAQ;AACrC,OAAO;AAEP,MAAMC,SAAA,GAAY;AAElB,OAAO,SAASC,8BAA8BC,UAAU,EAAEC,aAAa;EACrE,OAAO,OAAOA,aAAA,KAAkB,aAAaA,aAAA,CAAcD,UAAA,IAAcA,UAAA,EAAYE,KAAA;AACvF;AACA,OAAO,MAAMC,UAAA,GAAgDC,KAAA;EAAA,MAAAC,CAAA,GAAAZ,EAAA;EAC3D;IAAAa,SAAA;IAAAC,IAAA;IAAAC,UAAA;IAAAC,UAAA;IAAAC,WAAA,EAAAC;EAAA,IAOIP,KAAA;EAAA,IAAAQ,EAAA;EAAA,IAAAP,CAAA,QAAAM,EAAA;IADWC,EAAA,GAAAD,EAA2E,KAAAE,SAAA,QAA3EF,EAA2E;IAAAN,CAAA,MAAAM,EAAA;IAAAN,CAAA,MAAAO,EAAA;EAAA;IAAAA,EAAA,GAAAP,CAAA;EAAA;EAA3E;IAAAS,WAAA,EAAAC,EAAA;IAAAC,cAAA;IAAAC;EAAA,IAAAL,EAA2E;EAAA,IAAAM,EAAA;EAAA,IAAAb,CAAA,QAAAU,EAAA;IAA5DG,EAAA,GAAAH,EAAyB,KAAAF,SAAA,QAAzBE,EAAyB;IAAAV,CAAA,MAAAU,EAAA;IAAAV,CAAA,MAAAa,EAAA;EAAA;IAAAA,EAAA,GAAAb,CAAA;EAAA;EAAzB;IAAAc;EAAA,IAAAD,EAAyB;EAAA,IAAAE,EAAA;EAAA,IAAAf,CAAA,QAAAE,IAAA,IAAAF,CAAA,QAAAW,cAAA;IAG5CI,EAAA,GAAArB,6BAAA,CAA8BQ,IAAA,EAAMS,cAAA;IAAAX,CAAA,MAAAE,IAAA;IAAAF,CAAA,MAAAW,cAAA;IAAAX,CAAA,MAAAe,EAAA;EAAA;IAAAA,EAAA,GAAAf,CAAA;EAAA;EAA/C,MAAAgB,EAAA,GAAWD,EAAoC;EAInC,MAAAE,EAAA,IAACL,UAAA;EAAA,IAAAM,EAAA;EAAA,IAAAlB,CAAA,QAAAgB,EAAA,IAAAhB,CAAA,QAAAiB,EAAA;IAF6EC,EAAA;MAAAF,EAAA;MAAAG,QAAA,EAE9EF;IAAC;IACbjB,CAAA,MAAAgB,EAAA;IAAAhB,CAAA,MAAAiB,EAAA;IAAAjB,CAAA,MAAAkB,EAAA;EAAA;IAAAA,EAAA,GAAAlB,CAAA;EAAA;EAHA;IAAAoB,UAAA;IAAAC,UAAA;IAAAC,SAAA;IAAAC,UAAA;IAAAC;EAAA,IAAqEhC,oBAAA,CAAqB0B,EAG1F;EAKE,MAAAO,EAAA,IAACrB,UAAA,IAAcQ,UAAA,IAAc;EAC7B,MAAAc,EAAA,GAAAL,UAAA,IAAc,GAAA5B,SAAA,eAA2B;EAAA,IAAAkC,EAAA;EAAA,IAAA3B,CAAA,SAAAC,SAAA,IAAAD,CAAA,SAAAyB,EAAA,IAAAzB,CAAA,SAAA0B,EAAA;IAJ3BC,EAAA,IAAAlC,SAAA,EAEdQ,SAAA,EACAwB,EAA6B,EAC7BC,EAAyC,EAAAE,MAAA,CAAAC,OAEjC;IAAA7B,CAAA,OAAAC,SAAA;IAAAD,CAAA,OAAAyB,EAAA;IAAAzB,CAAA,OAAA0B,EAAA;IAAA1B,CAAA,OAAA2B,EAAA;EAAA;IAAAA,EAAA,GAAA3B,CAAA;EAAA;EANV,MAAA8B,OAAA,GAAgBH,EAMN,CAAAI,IAAA,CACF;EAAA,IAAAC,GAAA;EAAA,IAAAhC,CAAA,SAAAoB,UAAA,IAAApB,CAAA,SAAA8B,OAAA,IAAA9B,CAAA,SAAAc,gBAAA,IAAAd,CAAA,SAAAG,UAAA,IAAAH,CAAA,SAAAY,UAAA,IAAAZ,CAAA,SAAAsB,SAAA,IAAAtB,CAAA,SAAAD,KAAA,IAAAC,CAAA,SAAAuB,UAAA,IAAAvB,CAAA,SAAAwB,SAAA;IAGR;MAAAS,WAAA,EAAAC,kBAAA;MAAA,GAAAC;IAAA,IAA8Db,SAAA,MAAc;IAG1EU,GAAA,GAAAI,IAAA,CAAA/C,KAAA,CAAAgD,QAAA;MAAAC,QAAA,EACEF,IAAA,CAAA7C,gBAAA,CAAAO,UAAA;QAAA,GACMC,KAAK;QAAAE,SAAA,EACE6B,OAAA;QAAA3B,UAAA;UAAA,IAELS,UAAA;YAAA,GAEKQ,UAAU;YAAA,GACVe;UAAa,MAEhB;UAAA,GACHhC,UAAU;UAAA8B,WAAA,EAAAM,CAAA;YAAA,IAGP3B,UAAA,IAAcsB,kBAAA;cAChBA,kBAAA,CAAmBK,CAAA;YAAA;YAAA,KAGhBzB,gBAAA;cAEHyB,CAAA,CAAAC,eAAA,CAAiB;YAAA;UAAA;UAAAC,GAAA,EAGhBlB,UAAA;UAAAmB,KAAA,EACE9B,UAAA;YAAAY,SAAA;YAAA,GAGEJ,UAAA,EAAAsB;UAAA;QAEJ;MAAA,C;;;;;;;;;;;;;;;SA7BXV,G;CAkCJ","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/RelationshipTable/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,eAAe,EAEpB,KAAK,aAAa,EAClB,KAAK,KAAK,EACX,MAAM,SAAS,CAAA;AAEhB,OAAO,KAA6D,MAAM,OAAO,CAAA;AAEjF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAkBrE,OAAO,cAAc,CAAA;AAIrB,KAAK,+BAA+B,GAAG;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAA;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAA;IACpC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAA;IAC/D,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,cAAc,EAAE,cAAc,CAAA;QAC9B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;QACnB,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CACvC,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;AAEzE,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,+BAA+B,CA6VvE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/RelationshipTable/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,eAAe,EAEpB,KAAK,aAAa,EAClB,KAAK,KAAK,EACX,MAAM,SAAS,CAAA;AAEhB,OAAO,KAA6D,MAAM,OAAO,CAAA;AAEjF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAmBrE,OAAO,cAAc,CAAA;AAIrB,KAAK,+BAA+B,GAAG;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAA;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAA;IACpC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAA;IAC/D,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,cAAc,EAAE,cAAc,CAAA;QAC9B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;QACnB,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CACvC,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;AAEzE,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,+BAA+B,CAyWvE,CAAA"}