@ynput/ayon-frontend-shared 0.4.2 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/dist/ProjectTreeTable.cjs.js +1 -1
  2. package/dist/ProjectTreeTable.es.js +247 -243
  3. package/dist/_virtual/index.cjs22.js +1 -1
  4. package/dist/_virtual/index.cjs23.js +1 -1
  5. package/dist/_virtual/index.cjs24.js +1 -1
  6. package/dist/_virtual/index.cjs4.js +1 -1
  7. package/dist/_virtual/index.cjs5.js +1 -1
  8. package/dist/_virtual/index.cjs6.js +1 -1
  9. package/dist/_virtual/index.cjs8.js +1 -1
  10. package/dist/_virtual/index.es22.js +3 -3
  11. package/dist/_virtual/index.es23.js +5 -5
  12. package/dist/_virtual/index.es24.js +5 -5
  13. package/dist/_virtual/index.es4.js +2 -5
  14. package/dist/_virtual/index.es4.js.map +1 -1
  15. package/dist/_virtual/index.es5.js +5 -2
  16. package/dist/_virtual/index.es5.js.map +1 -1
  17. package/dist/_virtual/index.es6.js +2 -2
  18. package/dist/_virtual/index.es8.js +2 -2
  19. package/dist/api.cjs.js +1 -1
  20. package/dist/api.es.js +446 -445
  21. package/dist/index.cjs.js +1 -1
  22. package/dist/index.es.js +20 -9
  23. package/dist/index.es.js.map +1 -1
  24. package/dist/node_modules/match-sorter/dist/match-sorter.esm.cjs.js +1 -1
  25. package/dist/node_modules/match-sorter/dist/match-sorter.esm.es.js +1 -1
  26. package/dist/node_modules/parse-numeric-range/index.cjs.js +1 -1
  27. package/dist/node_modules/parse-numeric-range/index.es.js +1 -1
  28. package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +1 -1
  29. package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
  30. package/dist/node_modules/rehype/node_modules/vfile/lib/index.cjs.js +1 -1
  31. package/dist/node_modules/rehype/node_modules/vfile/lib/index.es.js +1 -1
  32. package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
  33. package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
  34. package/dist/node_modules/remove-accents/index.cjs.js +1 -1
  35. package/dist/node_modules/remove-accents/index.es.js +1 -1
  36. package/dist/shared/node_modules/@module-federation/error-codes/dist/index.cjs.js +1 -1
  37. package/dist/shared/node_modules/@module-federation/error-codes/dist/index.es.js +1 -1
  38. package/dist/shared/node_modules/@module-federation/runtime/dist/index.cjs.js +1 -1
  39. package/dist/shared/node_modules/@module-federation/runtime/dist/index.es.js +1 -1
  40. package/dist/shared/node_modules/@module-federation/runtime-core/dist/index.cjs.js +1 -1
  41. package/dist/shared/node_modules/@module-federation/runtime-core/dist/index.es.js +1 -1
  42. package/dist/shared/node_modules/react-is/index.cjs.js +1 -1
  43. package/dist/shared/node_modules/react-is/index.es.js +1 -1
  44. package/dist/shared/src/api/generated/graphql.cjs.js +85 -28
  45. package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
  46. package/dist/shared/src/api/generated/graphql.es.js +129 -68
  47. package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
  48. package/dist/shared/src/api/queries/columnStats/metricTargets.cjs.js +1 -1
  49. package/dist/shared/src/api/queries/columnStats/metricTargets.cjs.js.map +1 -1
  50. package/dist/shared/src/api/queries/columnStats/metricTargets.es.js +36 -36
  51. package/dist/shared/src/api/queries/columnStats/metricTargets.es.js.map +1 -1
  52. package/dist/shared/src/components/Chips/Chips.cjs.js +12 -6
  53. package/dist/shared/src/components/Chips/Chips.cjs.js.map +1 -1
  54. package/dist/shared/src/components/Chips/Chips.es.js +69 -62
  55. package/dist/shared/src/components/Chips/Chips.es.js.map +1 -1
  56. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js +1 -1
  57. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js.map +1 -1
  58. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js +32 -12
  59. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js.map +1 -1
  60. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +2 -2
  61. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
  62. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +33 -33
  63. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
  64. package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js.map +1 -1
  65. package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js.map +1 -1
  66. package/dist/shared/src/components/SubtasksManager/SubtasksManagerWrapper.cjs.js +1 -1
  67. package/dist/shared/src/components/SubtasksManager/SubtasksManagerWrapper.cjs.js.map +1 -1
  68. package/dist/shared/src/components/SubtasksManager/SubtasksManagerWrapper.es.js +39 -8
  69. package/dist/shared/src/components/SubtasksManager/SubtasksManagerWrapper.es.js.map +1 -1
  70. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +1 -1
  71. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
  72. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +32 -31
  73. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
  74. package/dist/shared/src/containers/DetailsPanel/containers/FeedWrapper.cjs.js.map +1 -1
  75. package/dist/shared/src/containers/DetailsPanel/containers/FeedWrapper.es.js.map +1 -1
  76. package/dist/shared/src/containers/Feed/helpers/buildBackendFilter.cjs.js +1 -1
  77. package/dist/shared/src/containers/Feed/helpers/buildBackendFilter.cjs.js.map +1 -1
  78. package/dist/shared/src/containers/Feed/helpers/buildBackendFilter.es.js +24 -18
  79. package/dist/shared/src/containers/Feed/helpers/buildBackendFilter.es.js.map +1 -1
  80. package/dist/shared/src/containers/Feed/helpers/feedFilterAdapter.cjs.js +1 -1
  81. package/dist/shared/src/containers/Feed/helpers/feedFilterAdapter.cjs.js.map +1 -1
  82. package/dist/shared/src/containers/Feed/helpers/feedFilterAdapter.es.js +26 -25
  83. package/dist/shared/src/containers/Feed/helpers/feedFilterAdapter.es.js.map +1 -1
  84. package/dist/shared/src/containers/ListTable/ListTableCell.cjs.js +1 -1
  85. package/dist/shared/src/containers/ListTable/ListTableCell.cjs.js.map +1 -1
  86. package/dist/shared/src/containers/ListTable/ListTableCell.es.js +14 -2
  87. package/dist/shared/src/containers/ListTable/ListTableCell.es.js.map +1 -1
  88. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +1 -1
  89. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
  90. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +125 -126
  91. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
  92. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.cjs.js +6 -0
  93. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.cjs.js.map +1 -1
  94. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.es.js +14 -8
  95. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.es.js.map +1 -1
  96. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +1 -1
  97. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  98. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +200 -178
  99. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  100. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +1 -1
  101. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
  102. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +14 -3
  103. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
  104. package/dist/shared/src/containers/ProjectTreeTable/constants.cjs.js +1 -1
  105. package/dist/shared/src/containers/ProjectTreeTable/constants.cjs.js.map +1 -1
  106. package/dist/shared/src/containers/ProjectTreeTable/constants.es.js +6 -3
  107. package/dist/shared/src/containers/ProjectTreeTable/constants.es.js.map +1 -1
  108. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.cjs.js +1 -1
  109. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.cjs.js.map +1 -1
  110. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.es.js +19 -19
  111. package/dist/shared/src/containers/ProjectTreeTable/hooks/useSortBySettings.es.js.map +1 -1
  112. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js +5 -3
  113. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js.map +1 -1
  114. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js +100 -97
  115. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js.map +1 -1
  116. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidget.cjs.js +9 -1
  117. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidget.cjs.js.map +1 -1
  118. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidget.es.js +47 -31
  119. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidget.es.js.map +1 -1
  120. package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.cjs.js +28 -9
  121. package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.cjs.js.map +1 -1
  122. package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.es.js +58 -39
  123. package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.es.js.map +1 -1
  124. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.cjs.js +53 -25
  125. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.cjs.js.map +1 -1
  126. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.es.js +150 -103
  127. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.es.js.map +1 -1
  128. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.cjs.js +9 -2
  129. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.cjs.js.map +1 -1
  130. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.es.js +66 -57
  131. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.es.js.map +1 -1
  132. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.cjs.js +1 -1
  133. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.cjs.js.map +1 -1
  134. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.es.js +9 -8
  135. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.es.js.map +1 -1
  136. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.cjs.js +20 -4
  137. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.cjs.js.map +1 -1
  138. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.es.js +86 -67
  139. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.es.js.map +1 -1
  140. package/dist/shared/src/containers/ProjectTreeTable/widgets/wrapMode.cjs.js +6 -0
  141. package/dist/shared/src/containers/ProjectTreeTable/widgets/wrapMode.cjs.js.map +1 -0
  142. package/dist/shared/src/containers/ProjectTreeTable/widgets/wrapMode.es.js +11 -0
  143. package/dist/shared/src/containers/ProjectTreeTable/widgets/wrapMode.es.js.map +1 -0
  144. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js +1 -1
  145. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js.map +1 -1
  146. package/dist/shared/src/containers/Views/context/ViewsContext.es.js +67 -62
  147. package/dist/shared/src/containers/Views/context/ViewsContext.es.js.map +1 -1
  148. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js +1 -1
  149. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js.map +1 -1
  150. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js +47 -46
  151. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js.map +1 -1
  152. package/dist/shared/src/context/ProjectContext.cjs.js +1 -1
  153. package/dist/shared/src/context/ProjectContext.cjs.js.map +1 -1
  154. package/dist/shared/src/context/ProjectContext.es.js +1 -1
  155. package/dist/shared/src/context/ProjectContext.es.js.map +1 -1
  156. package/dist/shared/src/util/buildHierarchicalTableRows.cjs.js +1 -1
  157. package/dist/shared/src/util/buildHierarchicalTableRows.cjs.js.map +1 -1
  158. package/dist/shared/src/util/buildHierarchicalTableRows.es.js +36 -33
  159. package/dist/shared/src/util/buildHierarchicalTableRows.es.js.map +1 -1
  160. package/dist/types/api/generated/graphql.d.ts +71 -0
  161. package/dist/types/api/queries/activities/getActivities.d.ts +28 -0
  162. package/dist/types/api/queries/entities/getEntity.d.ts +14 -0
  163. package/dist/types/api/queries/entities/getEntityPanel.d.ts +14 -0
  164. package/dist/types/api/queries/entities/updateEntity.d.ts +14 -0
  165. package/dist/types/api/queries/entityLists/getLists.d.ts +14 -0
  166. package/dist/types/api/queries/overview/getOverview.d.ts +14 -0
  167. package/dist/types/api/queries/project/getProject.d.ts +14 -0
  168. package/dist/types/api/queries/userDashboard/getUserDashboard.d.ts +14 -0
  169. package/dist/types/api/queries/users/getUsers.d.ts +14 -0
  170. package/dist/types/api/queries/versions/getVersionsProducts.d.ts +28 -0
  171. package/dist/types/components/SubtasksManager/SubtasksManagerWrapper.d.ts +4 -1
  172. package/dist/types/containers/Feed/helpers/buildBackendFilter.d.ts +1 -0
  173. package/dist/types/containers/ProjectTreeTable/buildTreeTableColumns.d.ts +1 -0
  174. package/dist/types/containers/ProjectTreeTable/constants.d.ts +3 -0
  175. package/dist/types/containers/ProjectTreeTable/widgets/SubtasksWidget.d.ts +1 -0
  176. package/dist/types/containers/ProjectTreeTable/widgets/wrapMode.d.ts +2 -0
  177. package/dist/types/containers/Views/context/ViewsContext.d.ts +1 -0
  178. package/dist/types/util/buildHierarchicalTableRows.d.ts +2 -0
  179. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Chips.es.js","sources":["../../../../../src/components/Chips/Chips.tsx"],"sourcesContent":["import { Icon } from '@ynput/ayon-react-components'\nimport clsx from 'clsx'\nimport React, { FC, useRef, useState, useLayoutEffect, HTMLAttributes } from 'react'\nimport styled from 'styled-components'\n\nconst ChipsContainer = styled.div`\n display: flex;\n gap: var(--base-gap-small);\n align-items: center;\n width: 100%;\n overflow: hidden;\n`\n\nconst Chip = styled.div`\n background-color: var(--md-sys-color-surface-container-high);\n border-radius: var(--border-radius-m);\n padding: 2px 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n cursor: pointer;\n\n display: flex;\n align-items: center;\n gap: 4px;\n\n flex-shrink: 0;\n min-width: auto;\n &.last {\n flex-shrink: 1;\n min-width: 0;\n }\n\n &:hover {\n background-color: var(--md-sys-color-surface-container-high-hover);\n }\n`\n\nconst OffscreenChip = styled(Chip)`\n visibility: hidden;\n position: absolute;\n top: -9999px;\n left: -9999px;\n z-index: -100;\n`\n\nconst MoreChip = styled(Chip)`\n flex-shrink: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n`\n\nconst AddIcon = styled(Icon)`\n background-color: var(--md-sys-color-surface-container);\n border-radius: var(--border-radius-m);\n width: 24px;\n height: 24px;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n\n &:hover {\n background-color: var(--md-sys-color-surface-container-high-hover);\n }\n`\n\nexport type ChipValue = {\n label: string\n tooltip: string\n icon?: string\n prefix?: React.ReactNode\n suffix?: React.ReactNode\n}\n\ninterface ChipsProps {\n values: ChipValue[]\n disabled?: boolean\n pt?: {\n chip?: Partial<HTMLAttributes<HTMLDivElement>>\n }\n}\n\nexport const Chips: FC<ChipsProps> = ({ values, disabled, pt }) => {\n const containerRef = useRef<HTMLDivElement>(null)\n const [visibleValues, setVisibleValues] = useState<ChipValue[]>([])\n const [hiddenCount, setHiddenCount] = useState(0)\n const [offscreenChips, setOffscreenChips] = useState<ChipValue[]>([])\n\n useLayoutEffect(() => {\n setOffscreenChips(values)\n }, [values])\n\n useLayoutEffect(() => {\n const calculateVisibleChips = () => {\n if (\n !containerRef.current ||\n offscreenChips.length === 0 ||\n offscreenChips.length !== values.length\n )\n return\n\n const containerWidth = containerRef.current.offsetWidth\n const chipElements = Array.from(containerRef.current.querySelectorAll('.offscreen-chip'))\n const moreChipElement = containerRef.current.querySelector('.more-chip')\n\n if (!chipElements.length) return\n\n let totalWidth = 0\n const newVisibleValues: ChipValue[] = []\n\n const moreChipWidth = moreChipElement?.getBoundingClientRect().width || 60\n\n // Always show the first chip\n if (values.length > 0) {\n const firstChipWidth = chipElements[0].getBoundingClientRect().width\n newVisibleValues.push(values[0])\n totalWidth += firstChipWidth\n }\n\n // Add additional chips if they fit\n for (let i = 1; i < values.length; i++) {\n const chipWidth = chipElements[i].getBoundingClientRect().width\n\n // Check if the next chip can fit completely\n if (totalWidth + chipWidth <= containerWidth) {\n totalWidth += chipWidth\n newVisibleValues.push(values[i])\n } else {\n // Check if there's room for the more chip\n if (totalWidth + moreChipWidth <= containerWidth) {\n // Keep current visible chips and show more chip\n break\n } else {\n // Remove the last chip if we need room for the more chip\n if (newVisibleValues.length > 1) {\n const lastChipWidth =\n chipElements[newVisibleValues.length - 1].getBoundingClientRect().width\n totalWidth -= lastChipWidth\n newVisibleValues.pop()\n }\n break\n }\n }\n }\n\n const finalHiddenCount = values.length - newVisibleValues.length\n setVisibleValues(newVisibleValues)\n setHiddenCount(finalHiddenCount)\n }\n\n const resizeObserver = new ResizeObserver(calculateVisibleChips)\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current)\n }\n\n // Initial calculation\n calculateVisibleChips()\n\n return () => {\n if (containerRef.current) {\n resizeObserver.unobserve(containerRef.current)\n }\n }\n }, [values, offscreenChips])\n\n if (disabled) return null\n\n // for no values return plus button\n if (!values.length) {\n return <AddIcon icon=\"add\" className={pt?.chip?.className} />\n }\n\n return (\n <ChipsContainer ref={containerRef}>\n {visibleValues.map((chip, index) => (\n <Chip\n {...pt?.chip}\n key={chip.label + index}\n data-tooltip={chip.tooltip}\n className={clsx(\n 'chip',\n { last: index === visibleValues.length - 1 && hiddenCount > 0 },\n pt?.chip?.className,\n )}\n >\n {chip.prefix}\n {chip?.icon && <Icon icon={chip.icon} />}\n {chip.label}\n {chip.suffix}\n </Chip>\n ))}\n {hiddenCount > 0 && (\n <MoreChip className={clsx('more-chip', pt?.chip?.className)}>+{hiddenCount}</MoreChip>\n )}\n {offscreenChips.map((chip, index) => (\n <OffscreenChip key={chip.label + index} className=\"offscreen-chip\">\n {chip.prefix}\n {chip?.icon && <Icon icon={chip.icon} />}\n {chip.label}\n {chip.suffix}\n </OffscreenChip>\n ))}\n </ChipsContainer>\n )\n}\n"],"names":["ChipsContainer","styled","Chip","OffscreenChip","MoreChip","AddIcon","Icon","Chips","values","disabled","pt","containerRef","useRef","visibleValues","setVisibleValues","useState","hiddenCount","setHiddenCount","offscreenChips","setOffscreenChips","useLayoutEffect","calculateVisibleChips","containerWidth","chipElements","moreChipElement","totalWidth","newVisibleValues","moreChipWidth","firstChipWidth","i","chipWidth","lastChipWidth","finalHiddenCount","resizeObserver","jsxs","chip","index","createElement","clsx","jsx"],"mappings":"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"}
1
+ {"version":3,"file":"Chips.es.js","sources":["../../../../../src/components/Chips/Chips.tsx"],"sourcesContent":["import { Icon } from '@ynput/ayon-react-components'\nimport clsx from 'clsx'\nimport React, { FC, useRef, useState, useLayoutEffect, HTMLAttributes } from 'react'\nimport styled from 'styled-components'\n\nconst ChipsContainer = styled.div`\n display: flex;\n gap: var(--base-gap-small);\n align-items: center;\n align-self: stretch;\n width: 100%;\n overflow: hidden;\n\n &.multi-row {\n flex-wrap: wrap;\n align-content: center;\n }\n`\n\nconst Chip = styled.div`\n background-color: var(--md-sys-color-surface-container-high);\n border-radius: var(--border-radius-m);\n padding: 2px 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n cursor: pointer;\n\n display: flex;\n align-items: center;\n gap: 4px;\n\n flex-shrink: 0;\n min-width: auto;\n &.last {\n flex-shrink: 1;\n min-width: 0;\n }\n\n &:hover {\n background-color: var(--md-sys-color-surface-container-high-hover);\n }\n`\n\nconst OffscreenChip = styled(Chip)`\n visibility: hidden;\n position: absolute;\n top: -9999px;\n left: -9999px;\n z-index: -100;\n`\n\nconst MoreChip = styled(Chip)`\n flex-shrink: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n`\n\nconst AddIcon = styled(Icon)`\n background-color: var(--md-sys-color-surface-container);\n border-radius: var(--border-radius-m);\n width: 24px;\n height: 24px;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n\n &:hover {\n background-color: var(--md-sys-color-surface-container-high-hover);\n }\n`\n\nexport type ChipValue = {\n label: string\n tooltip: string\n icon?: string\n prefix?: React.ReactNode\n suffix?: React.ReactNode\n}\n\ninterface ChipsProps {\n values: ChipValue[]\n disabled?: boolean\n pt?: {\n chip?: Partial<HTMLAttributes<HTMLDivElement>>\n }\n}\n\ntype ChipsLayout = {\n visibleCount: number\n rows: number\n}\n\nexport const Chips: FC<ChipsProps> = ({ values, disabled, pt }) => {\n const containerRef = useRef<HTMLDivElement>(null)\n const [{ visibleCount, rows }, setLayout] = useState<ChipsLayout>({\n visibleCount: 0,\n rows: 1,\n })\n const [offscreenChips, setOffscreenChips] = useState<ChipValue[]>([])\n\n useLayoutEffect(() => {\n setOffscreenChips(values)\n }, [values])\n\n useLayoutEffect(() => {\n const container = containerRef.current\n if (!container || offscreenChips.length === 0 || offscreenChips.length !== values.length) return\n\n const chipElements = Array.from(container.querySelectorAll('.offscreen-chip'))\n if (chipElements.length !== values.length) return\n\n const gap = parseFloat(getComputedStyle(container).rowGap) || 0\n const chipWidths = chipElements.map((el) => el.getBoundingClientRect().width)\n const chipHeight = chipElements[0].getBoundingClientRect().height\n // measured offscreen at its widest label, so it does not depend on the +N chip being rendered\n const moreChipWidth =\n container.querySelector('.offscreen-more-chip')?.getBoundingClientRect().width || 60\n\n const rowsNeeded = (count: number, extraWidth: number, containerWidth: number) => {\n let used = 1\n let rowWidth = 0\n const place = (width: number, isFirst: boolean) => {\n if (isFirst) rowWidth = width\n else if (rowWidth + gap + width <= containerWidth) rowWidth += gap + width\n else {\n used++\n rowWidth = width\n }\n }\n\n for (let i = 0; i < count; i++) place(chipWidths[i], i === 0)\n if (extraWidth) place(extraWidth, count === 0)\n return used\n }\n\n const calculateLayout = () => {\n const containerWidth = container.getBoundingClientRect().width\n const containerHeight = container.offsetHeight\n const rows = chipHeight\n ? Math.max(1, Math.floor((containerHeight + gap) / (chipHeight + gap)))\n : 1\n\n // drop chips until they and the more chip fit the rows available\n let visibleCount = values.length\n while (\n visibleCount > 1 &&\n rowsNeeded(visibleCount, visibleCount < values.length ? moreChipWidth : 0, containerWidth) >\n rows\n ) {\n visibleCount--\n }\n\n setLayout((prev) =>\n prev.visibleCount === visibleCount && prev.rows === rows ? prev : { visibleCount, rows },\n )\n }\n\n const resizeObserver = new ResizeObserver(calculateLayout)\n resizeObserver.observe(container)\n\n // Initial calculation\n calculateLayout()\n\n return () => resizeObserver.disconnect()\n }, [values, offscreenChips])\n\n if (disabled) return null\n\n // for no values return plus button\n if (!values.length) {\n return <AddIcon icon=\"add\" className={pt?.chip?.className} />\n }\n\n const visibleValues = values.slice(0, visibleCount)\n const hiddenCount = visibleCount ? values.length - visibleValues.length : 0\n\n return (\n <ChipsContainer ref={containerRef} className={clsx({ 'multi-row': rows > 1 })}>\n {visibleValues.map((chip, index) => (\n <Chip\n {...pt?.chip}\n key={chip.label + index}\n data-tooltip={chip.tooltip}\n className={clsx(\n 'chip',\n { last: index === visibleValues.length - 1 && hiddenCount > 0 },\n pt?.chip?.className,\n )}\n >\n {chip.prefix}\n {chip?.icon && <Icon icon={chip.icon} />}\n {chip.label}\n {chip.suffix}\n </Chip>\n ))}\n {hiddenCount > 0 && (\n <MoreChip className={clsx('more-chip', pt?.chip?.className)}>+{hiddenCount}</MoreChip>\n )}\n {offscreenChips.map((chip, index) => (\n <OffscreenChip key={chip.label + index} className=\"offscreen-chip\">\n {chip.prefix}\n {chip?.icon && <Icon icon={chip.icon} />}\n {chip.label}\n {chip.suffix}\n </OffscreenChip>\n ))}\n {offscreenChips.length > 1 && (\n <OffscreenChip className=\"offscreen-more-chip\">+{offscreenChips.length - 1}</OffscreenChip>\n )}\n </ChipsContainer>\n )\n}\n"],"names":["ChipsContainer","styled","Chip","OffscreenChip","MoreChip","AddIcon","Icon","Chips","values","disabled","pt","containerRef","useRef","visibleCount","rows","setLayout","useState","offscreenChips","setOffscreenChips","useLayoutEffect","container","chipElements","gap","chipWidths","el","chipHeight","moreChipWidth","rowsNeeded","count","extraWidth","containerWidth","used","rowWidth","place","width","isFirst","i","calculateLayout","containerHeight","prev","resizeObserver","visibleValues","hiddenCount","jsxs","clsx","chip","index","createElement","jsx"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- "use strict";const a=require("../../../../../_virtual/jsx-runtime.cjs.js"),j=require("styled-components");require("../../../containers/ProjectTreeTable/widgets/CollapsedWidget.cjs.js");const E=require("../../../containers/ProjectTreeTable/widgets/DateWidget.cjs.js"),k=require("../../../containers/ProjectTreeTable/widgets/EnumWidget.cjs.js");require("../../../containers/ProjectTreeTable/widgets/EnumCellValue.cjs.js");const R=require("../../../containers/ProjectTreeTable/widgets/TextWidget.cjs.js"),T=require("../../../containers/ProjectTreeTable/widgets/MarkdownWidget.cjs.js"),V=require("../../../containers/ProjectTreeTable/widgets/BooleanWidget.cjs.js");require("../../../containers/ProjectTreeTable/widgets/CellWidget.cjs.js");require("../../../containers/ProjectTreeTable/widgets/EntityNameWidget.cjs.js");require("../../../containers/ProjectTreeTable/widgets/EntityWidget.cjs.js");require("../../../containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js");require("../../../containers/ProjectTreeTable/widgets/ThumbnailWidget.cjs.js");require("../../../containers/ProjectTreeTable/widgets/LinksWidget.cjs.js");require("../../Chips/Chips.cjs.js");require("../../DoneCheckbox/DoneCheckbox.cjs.js");require("../../../api/base/client.cjs.js");require("../../../api/generated/graphql.cjs.js");require("../../../api/generated/graphqlLinks.cjs.js");require("../../../api/generated/access.cjs.js");require("../../../api/generated/actions.cjs.js");require("../../../api/generated/activityFeed.cjs.js");require("../../../api/generated/addons.cjs.js");require("../../../api/generated/anatomy.cjs.js");require("../../../api/generated/attributes.cjs.js");require("../../../api/generated/authentication.cjs.js");require("../../../api/generated/bundles.cjs.js");require("../../../api/generated/configuration.cjs.js");require("../../../api/generated/dataImport.cjs.js");require("../../../api/generated/desktop.cjs.js");require("../../../api/generated/entityLists.cjs.js");require("../../../api/generated/events.cjs.js");require("../../../api/generated/files.cjs.js");require("../../../api/generated/folders.cjs.js");require("../../../api/generated/inbox.cjs.js");require("../../../api/generated/links.cjs.js");require("../../../api/generated/market.cjs.js");require("../../../api/generated/onboarding.cjs.js");require("../../../api/generated/operations.cjs.js");require("../../../api/generated/products.cjs.js");require("../../../api/generated/projectDashboard.cjs.js");require("../../../api/generated/projects.cjs.js");require("../../../api/generated/projectFolders.cjs.js");require("../../../api/generated/reviewables.cjs.js");require("../../../api/generated/services.cjs.js");require("../../../api/generated/system.cjs.js");require("../../../api/generated/tasks.cjs.js");require("../../../api/generated/teams.cjs.js");require("../../../api/generated/thumbnails.cjs.js");require("../../../api/generated/uRIs.cjs.js");require("../../../api/generated/users.cjs.js");require("../../../api/generated/versions.cjs.js");require("../../../api/generated/workfiles.cjs.js");require("../../../api/generated/ynputCloud.cjs.js");require("../../../api/generated/grouping.cjs.js");require("../../../api/generated/views.cjs.js");require("../../../api/queries/actions/getActions.cjs.js");require("../../../api/queries/activities/getActivities.cjs.js");require("../../../api/queries/activities/updateReaction.cjs.js");require("../../../api/queries/activities/getMentions.cjs.js");require("../../../api/queries/activities/getCategories.cjs.js");require("../../../api/queries/addons/getAddons.cjs.js");require("../../../api/queries/addons/updateAddons.cjs.js");require("../../../api/queries/attributes/getAttributes.cjs.js");require("../../../api/queries/attributes/updateAttributes.cjs.js");require("../../../api/queries/authentication/getAuthentication.cjs.js");require("../../../api/queries/bundles/getBundles.cjs.js");require("../../../api/queries/bundles/updateBundles.cjs.js");require("../../../api/queries/cloud/cloud.cjs.js");require("../../../api/queries/columnStats/metricTargets.cjs.js");require("../../../api/queries/columnStats/groupCounts.cjs.js");require("../../../api/queries/config/getConfig.cjs.js");require("../../../api/queries/config/updateConfig.cjs.js");require("../../../api/queries/entities/getEntity.cjs.js");require("../../../api/queries/entities/getEntityPanel.cjs.js");require("../../../api/queries/overview/getOverview.cjs.js");require("../../../api/queries/overview/updateOverview.cjs.js");require("../../../api/queries/versions/getVersionsProducts.cjs.js");require("../../../api/queries/links/getEntityLinks.cjs.js");require("../../../api/queries/entities/updateEntity.cjs.js");require("../../../api/queries/entityLists/getLists.cjs.js");require("../../../api/queries/entityLists/updateLists.cjs.js");require("../../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../../api/queries/entityLists/listItemsColumnStats.cjs.js");require("../../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../../api/queries/entityLists/listFolders.cjs.js");require("../../../api/queries/folders/getFolders.cjs.js");require("../../../api/queries/folders/getFolderDeleteInfo.cjs.js");require("../../../api/queries/grouping/getGrouping.cjs.js");require("../../../api/queries/links/updateLinks.cjs.js");require("../../../api/queries/links/getLinks.cjs.js");require("../../../api/queries/permissions/getPermissions.cjs.js");require("../../../api/queries/products/createProduct.cjs.js");require("../../../api/queries/products/getFolderProducts.cjs.js");require("../../../api/queries/project/getProject.cjs.js");require("../../../api/queries/project/updateProject.cjs.js");require("../../../api/queries/projectFolders/projectFolders.cjs.js");require("../../../api/queries/review/getReview.cjs.js");require("../../../api/queries/review/updateReview.cjs.js");require("../../../api/queries/share/share.cjs.js");require("../../../api/queries/system/getSystem.cjs.js");require("../../../api/queries/tasks/getTasks.cjs.js");require("../../../api/queries/tasks/updateTasks.cjs.js");require("../../../api/queries/teams/getTeams.cjs.js");require("../../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../../api/queries/users/getUsers.cjs.js");require("../../../api/queries/users/updateUsers.cjs.js");require("../../../api/queries/users/guests.cjs.js");require("../../../api/queries/versions/updateVersions.cjs.js");require("../../../api/queries/views/getViews.cjs.js");require("../../../api/queries/views/updateViews.cjs.js");require("../../../api/queries/watchers/getWatchers.cjs.js");require("../../../api/queries/uris/getUris.cjs.js");require("../../LinksManager/CellEditingDialog.cjs.js");require("react");require("../../LinksManager/LinksManager.styled.cjs.js");require("short-uuid");require("@ynput/ayon-react-components");require("../../SearchFilter/filterDates.cjs.js");require("date-fns");require("../../../containers/ProjectTreeTable/utils/columnIds.cjs.js");require("react-toastify");require("lodash");require("uuid");require("../../../util/pubsub.cjs.js");require("clsx");require("../../../containers/Feed/components/ActivityCheckbox/ActivityCheckbox.styled.cjs.js");require("../../../containers/Feed/components/ActivityReference/ActivityReference.styled.cjs.js");require("../../../containers/Feed/components/ActivityComment/ActivityComment.styled.cjs.js");require("react-router-dom");require("../../../containers/ProjectTreeTable/context/CellEditingContext.cjs.js");require("../../../containers/ProjectTreeTable/context/SelectionCellsContext.cjs.js");require("../../../containers/ProjectTreeTable/context/ProjectTableQueriesContext.cjs.js");require("../../../context/ProjectContext.cjs.js");require("../../../containers/ProjectTreeTable/context/ClipboardContext.cjs.js");require("@tanstack/react-table");require("../../../containers/ProjectTreeTable/context/ColumnSettingsContext.cjs.js");require("../../../containers/ProjectTreeTable/context/SelectedRowsContext.cjs.js");require("../../../containers/ProjectTreeTable/context/DetailsPanelEntityContext.cjs.js");;/* empty css */require("../../../containers/ContextMenu/ContextMenuContext.cjs.js");require("../../../context/DeleteEntitiesContext.cjs.js");require("../../../context/GlobalContext.cjs.js");require("../../../containers/ProjectTreeTable/context/ProjectDataContextInstance.cjs.js");require("../../../context/ProjectFoldersContextInstance.cjs.js");require("../../../containers/ProjectTreeTable/buildTreeTableColumns.cjs.js");require("../../../containers/ProjectTreeTable/context/ProjectTableContextInstance.cjs.js");require("../../../containers/ProjectTreeTable/widgets/EmptyWidget.cjs.js");require("../../../containers/ProjectTreeTable/widgets/ErrorWidget.cjs.js");const D=require("../../../hooks/useScopedStatuses.cjs.js"),N=require("../../../hooks/useScopedTypes.cjs.js"),f=j.div`
1
+ "use strict";const a=require("../../../../../_virtual/jsx-runtime.cjs.js"),j=require("styled-components");require("../../../containers/ProjectTreeTable/widgets/CollapsedWidget.cjs.js");const E=require("../../../containers/ProjectTreeTable/widgets/DateWidget.cjs.js"),k=require("../../../containers/ProjectTreeTable/widgets/EnumWidget.cjs.js");require("../../../containers/ProjectTreeTable/widgets/EnumCellValue.cjs.js");const R=require("../../../containers/ProjectTreeTable/widgets/TextWidget.cjs.js"),T=require("../../../containers/ProjectTreeTable/widgets/MarkdownWidget.cjs.js"),V=require("../../../containers/ProjectTreeTable/widgets/BooleanWidget.cjs.js");require("../../../containers/ProjectTreeTable/widgets/CellWidget.cjs.js");require("../../../containers/ProjectTreeTable/widgets/EntityNameWidget.cjs.js");require("../../../containers/ProjectTreeTable/widgets/EntityWidget.cjs.js");require("../../../containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js");require("../../../containers/ProjectTreeTable/widgets/ThumbnailWidget.cjs.js");require("../../../containers/ProjectTreeTable/widgets/LinksWidget.cjs.js");require("../../Chips/Chips.cjs.js");require("../../DoneCheckbox/DoneCheckbox.cjs.js");require("../../../api/base/client.cjs.js");require("../../../api/generated/graphql.cjs.js");require("../../../api/generated/graphqlLinks.cjs.js");require("../../../api/generated/access.cjs.js");require("../../../api/generated/actions.cjs.js");require("../../../api/generated/activityFeed.cjs.js");require("../../../api/generated/addons.cjs.js");require("../../../api/generated/anatomy.cjs.js");require("../../../api/generated/attributes.cjs.js");require("../../../api/generated/authentication.cjs.js");require("../../../api/generated/bundles.cjs.js");require("../../../api/generated/configuration.cjs.js");require("../../../api/generated/dataImport.cjs.js");require("../../../api/generated/desktop.cjs.js");require("../../../api/generated/entityLists.cjs.js");require("../../../api/generated/events.cjs.js");require("../../../api/generated/files.cjs.js");require("../../../api/generated/folders.cjs.js");require("../../../api/generated/inbox.cjs.js");require("../../../api/generated/links.cjs.js");require("../../../api/generated/market.cjs.js");require("../../../api/generated/onboarding.cjs.js");require("../../../api/generated/operations.cjs.js");require("../../../api/generated/products.cjs.js");require("../../../api/generated/projectDashboard.cjs.js");require("../../../api/generated/projects.cjs.js");require("../../../api/generated/projectFolders.cjs.js");require("../../../api/generated/reviewables.cjs.js");require("../../../api/generated/services.cjs.js");require("../../../api/generated/system.cjs.js");require("../../../api/generated/tasks.cjs.js");require("../../../api/generated/teams.cjs.js");require("../../../api/generated/thumbnails.cjs.js");require("../../../api/generated/uRIs.cjs.js");require("../../../api/generated/users.cjs.js");require("../../../api/generated/versions.cjs.js");require("../../../api/generated/workfiles.cjs.js");require("../../../api/generated/ynputCloud.cjs.js");require("../../../api/generated/grouping.cjs.js");require("../../../api/generated/views.cjs.js");require("../../../api/queries/actions/getActions.cjs.js");require("../../../api/queries/activities/getActivities.cjs.js");require("../../../api/queries/activities/updateReaction.cjs.js");require("../../../api/queries/activities/getMentions.cjs.js");require("../../../api/queries/activities/getCategories.cjs.js");require("../../../api/queries/addons/getAddons.cjs.js");require("../../../api/queries/addons/updateAddons.cjs.js");require("../../../api/queries/attributes/getAttributes.cjs.js");require("../../../api/queries/attributes/updateAttributes.cjs.js");require("../../../api/queries/authentication/getAuthentication.cjs.js");require("../../../api/queries/bundles/getBundles.cjs.js");require("../../../api/queries/bundles/updateBundles.cjs.js");require("../../../api/queries/cloud/cloud.cjs.js");require("../../../api/queries/columnStats/metricTargets.cjs.js");require("../../../api/queries/columnStats/groupCounts.cjs.js");require("../../../api/queries/config/getConfig.cjs.js");require("../../../api/queries/config/updateConfig.cjs.js");require("../../../api/queries/entities/getEntity.cjs.js");require("../../../api/queries/entities/getEntityPanel.cjs.js");require("../../../api/queries/overview/getOverview.cjs.js");require("../../../api/queries/overview/updateOverview.cjs.js");require("../../../api/queries/versions/getVersionsProducts.cjs.js");require("../../../api/queries/links/getEntityLinks.cjs.js");require("../../../api/queries/entities/updateEntity.cjs.js");require("../../../api/queries/entityLists/getLists.cjs.js");require("../../../api/queries/entityLists/updateLists.cjs.js");require("../../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../../api/queries/entityLists/listItemsColumnStats.cjs.js");require("../../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../../api/queries/entityLists/listFolders.cjs.js");require("../../../api/queries/folders/getFolders.cjs.js");require("../../../api/queries/folders/getFolderDeleteInfo.cjs.js");require("../../../api/queries/grouping/getGrouping.cjs.js");require("../../../api/queries/links/updateLinks.cjs.js");require("../../../api/queries/links/getLinks.cjs.js");require("../../../api/queries/permissions/getPermissions.cjs.js");require("../../../api/queries/products/createProduct.cjs.js");require("../../../api/queries/products/getFolderProducts.cjs.js");require("../../../api/queries/project/getProject.cjs.js");require("../../../api/queries/project/updateProject.cjs.js");require("../../../api/queries/projectFolders/projectFolders.cjs.js");require("../../../api/queries/review/getReview.cjs.js");require("../../../api/queries/review/updateReview.cjs.js");require("../../../api/queries/share/share.cjs.js");require("../../../api/queries/system/getSystem.cjs.js");require("../../../api/queries/tasks/getTasks.cjs.js");require("../../../api/queries/tasks/updateTasks.cjs.js");require("../../../api/queries/teams/getTeams.cjs.js");require("../../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../../api/queries/users/getUsers.cjs.js");require("../../../api/queries/users/updateUsers.cjs.js");require("../../../api/queries/users/guests.cjs.js");require("../../../api/queries/versions/updateVersions.cjs.js");require("../../../api/queries/views/getViews.cjs.js");require("../../../api/queries/views/updateViews.cjs.js");require("../../../api/queries/watchers/getWatchers.cjs.js");require("../../../api/queries/uris/getUris.cjs.js");require("../../../context/RemoteModulesContext.cjs.js");require("react");require("../../../../../_virtual/runtime.cjs.js");require("../../../../../_virtual/semver.cjs.js");require("../../../context/PowerpackContextInstance.cjs.js");require("../../../context/UriContext.cjs.js");require("../../../context/DetailsPanelContextInstance.cjs.js");require("lodash");require("react-toastify");require("uuid");require("../../../util/pubsub.cjs.js");require("../../../context/SubtasksModulesContextInstance.cjs.js");require("../../../context/ThumbnailUploaderContext.cjs.js");require("../../../context/SettingsPanelContext.cjs.js");require("../../../context/pip/PiPProvider.cjs.js");require("react-dom");require("../../../context/pip/PiPWrapper.cjs.js");require("../../../context/AddonProjectContext.cjs.js");require("../../../context/AddonContext.cjs.js");require("../../../context/MenuContext.cjs.js");require("../../../context/WebsocketContext.cjs.js");require("../../../context/GlobalContext.cjs.js");require("../../../context/ProjectContext.cjs.js");require("../../../context/ProjectFoldersContextInstance.cjs.js");require("../../../context/EntityUpdatesContextInstance.cjs.js");require("react-redux");require("../../../containers/Views/ViewsMenu/ViewsMenu.cjs.js");require("@ynput/ayon-react-components");require("../../../containers/Views/context/ViewsContextInstance.cjs.js");require("../../../context/DeleteEntitiesContext.cjs.js");require("../../LinksManager/CellEditingDialog.cjs.js");require("../../LinksManager/LinksManager.styled.cjs.js");require("short-uuid");require("../../SearchFilter/filterDates.cjs.js");require("date-fns");require("../../../containers/ProjectTreeTable/utils/columnIds.cjs.js");require("clsx");require("../../../containers/Feed/components/ActivityCheckbox/ActivityCheckbox.styled.cjs.js");require("../../../containers/Feed/components/ActivityReference/ActivityReference.styled.cjs.js");require("../../../containers/Feed/components/ActivityComment/ActivityComment.styled.cjs.js");require("react-router-dom");require("../../../containers/ProjectTreeTable/context/CellEditingContext.cjs.js");require("../../../containers/ProjectTreeTable/context/SelectionCellsContext.cjs.js");require("../../../containers/ProjectTreeTable/context/ProjectTableQueriesContext.cjs.js");require("../../../containers/ProjectTreeTable/context/ClipboardContext.cjs.js");require("@tanstack/react-table");require("../../../containers/ProjectTreeTable/context/ColumnSettingsContext.cjs.js");require("../../../containers/ProjectTreeTable/context/SelectedRowsContext.cjs.js");require("../../../containers/ProjectTreeTable/context/DetailsPanelEntityContext.cjs.js");;/* empty css */require("../../../containers/ContextMenu/ContextMenuContext.cjs.js");require("../../../containers/ProjectTreeTable/context/ProjectDataContextInstance.cjs.js");require("../../../containers/ProjectTreeTable/buildTreeTableColumns.cjs.js");require("../../../containers/ProjectTreeTable/context/ProjectTableContextInstance.cjs.js");require("../../../containers/ProjectTreeTable/widgets/EmptyWidget.cjs.js");require("../../../containers/ProjectTreeTable/widgets/ErrorWidget.cjs.js");const D=require("../../../hooks/useScopedStatuses.cjs.js"),N=require("../../../hooks/useScopedTypes.cjs.js"),f=j.div`
2
2
  width: 100%;
3
3
  overflow: hidden;
4
4
  text-overflow: ellipsis;
@@ -1 +1 @@
1
- {"version":3,"file":"RenderFieldWidget.cjs.js","sources":["../../../../../../src/components/DetailsPanelAttributes/components/RenderFieldWidget.tsx"],"sourcesContent":["import { FC } from 'react'\nimport styled from 'styled-components'\nimport type { CellValue } from '@shared/containers/ProjectTreeTable/widgets/CellWidget'\nimport {\n TextWidget,\n MarkdownWidget,\n BooleanWidget,\n DateWidget,\n EnumWidget,\n} from '@shared/containers/ProjectTreeTable/widgets'\nimport { useScopedStatuses } from '@shared/hooks/useScopedStatuses'\nimport { useScopedTypes } from '@shared/hooks/useScopedTypes'\n// Import AttributeField as a type to avoid runtime circular dependency with DetailsPanelAttributesEditor\nimport type { AttributeField } from '../DetailsPanelAttributesEditor'\nimport type { DetailsPanelEntityData, EnumItem } from '@shared/api'\n\nconst FieldValueText = styled.div`\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-align: right;\n\n input {\n text-align: left;\n }\n`\n\nconst StyledEnumWidget = styled(EnumWidget)`\n .enum,\n .edit-trigger {\n &:hover {\n background-color: unset;\n }\n }\n &:hover {\n background-color: unset;\n }\n`\n\ninterface RenderFieldWidgetProps {\n field: AttributeField\n value: any\n isEditing: boolean\n isReadOnly: boolean\n isMixed: boolean\n onChange: (fieldName: string, value: CellValue | CellValue[]) => void\n onCancelEdit: () => void\n onExpand?: () => void\n entities?: DetailsPanelEntityData[]\n entityType?: string\n}\n\nconst RenderFieldWidget: FC<RenderFieldWidgetProps> = ({\n field,\n value,\n isEditing,\n isReadOnly,\n isMixed,\n onChange,\n onCancelEdit,\n onExpand,\n entities = [],\n entityType = 'task',\n}) => {\n const { type, widget } = field.data\n const widgetCommonProps = {\n isEditing: isEditing && !isReadOnly,\n isReadOnly: isReadOnly,\n isInherited: false,\n onChange: (newValue: CellValue | CellValue[]) => onChange(field.name, newValue),\n }\n\n // Hooks must be called at top level - not inside conditions\n const projectNames = entities.map((entity) => entity.projectName)\n const scopedStatuses = useScopedStatuses(projectNames, [entityType])\n const scopedTypes = useScopedTypes(projectNames, entityType)\n const isMidnightExclusive =\n field.name === 'attrib.endDate' &&\n entities.length > 0 &&\n entities.every((entity) => entity.data?.schedulerSyncData?.allDay === true)\n\n // Format the value for display\n let displayValue = value === null || value === undefined ? '' : value\n const labelValue = field.data.title || field.name\n\n // Handle different field types\n switch (true) {\n case type === 'boolean':\n return (\n <BooleanWidget value={Boolean(displayValue)} {...widgetCommonProps} style={{ margin: 0 }} />\n )\n\n case type === 'datetime':\n return (\n <DateWidget\n value={displayValue}\n {...widgetCommonProps}\n isEditing\n onCancelEdit={onCancelEdit}\n style={{ width: 'fit-content' }}\n autoFocus={false}\n isMidnightExclusive={isMidnightExclusive}\n />\n )\n\n case !!field.data.enum: {\n const isListType = type?.includes('list')\n let valueArray = []\n\n if (isListType) {\n valueArray = Array.isArray(displayValue) ? displayValue : []\n } else if (isMixed) {\n valueArray = []\n } else {\n valueArray = [displayValue]\n }\n\n // Use scoped statuses/types based on field name\n let enumOptions: EnumItem[] = (field.data.enum || []).map((item) => ({\n value: item.value,\n label: item.label,\n icon: typeof item.icon === 'string' ? item.icon : undefined,\n color: item.color,\n }))\n if (\n field.name === 'status' &&\n entities.length > 0 &&\n scopedStatuses &&\n scopedStatuses.length > 0\n ) {\n enumOptions = scopedStatuses.map((status) => ({\n value: status.name,\n label: status.name,\n icon: status.icon,\n color: status.color,\n }))\n }\n if (\n field.name === 'taskType' &&\n entities.length > 0 &&\n scopedTypes &&\n scopedTypes.length > 0\n ) {\n enumOptions = scopedTypes.map((t) => ({\n value: t.name,\n label: t.name,\n icon: t.icon,\n color: t.color,\n }))\n }\n\n if (field.allowNone && !!valueArray.length && !isListType) {\n // Check if current field has a value (for single value fields)\n const hasCurrentValue = displayValue && displayValue !== ''\n if (hasCurrentValue) {\n enumOptions = [\n { value: '', label: `No ${field.data.title || field.name}` },\n ...enumOptions,\n ]\n }\n }\n\n return (\n <StyledEnumWidget\n value={valueArray}\n options={enumOptions}\n type={type}\n pt={{\n template: {\n style: { height: 32 },\n className: 'enum',\n },\n }}\n placeholder={isMixed ? `Mixed ${labelValue}` : `Select ${labelValue}...`}\n onCancelEdit={onCancelEdit}\n align=\"right\"\n enableCustomValues={field.enableCustomValues ?? false}\n search={field.enableSearch ?? enumOptions.length >= 5}\n sortBySelected={!enumOptions}\n {...widgetCommonProps}\n />\n )\n }\n\n case type === 'string' || type === 'integer' || type === 'float':\n default:\n if (widget === 'markdown') {\n return (\n <MarkdownWidget\n value={displayValue.toString()}\n onCancelEdit={onCancelEdit}\n onExpand={onExpand}\n showExpand={!!onExpand}\n {...widgetCommonProps}\n />\n )\n } else {\n return (\n <FieldValueText>\n <TextWidget\n value={displayValue.toString()}\n onCancelEdit={onCancelEdit}\n type={type as 'string' | 'integer' | 'float'}\n {...widgetCommonProps}\n />\n </FieldValueText>\n )\n }\n }\n}\n\nexport default RenderFieldWidget\n"],"names":["FieldValueText","styled","StyledEnumWidget","EnumWidget","RenderFieldWidget","field","value","isEditing","isReadOnly","isMixed","onChange","onCancelEdit","onExpand","entities","entityType","type","widget","widgetCommonProps","newValue","projectNames","entity","scopedStatuses","useScopedStatuses","scopedTypes","useScopedTypes","isMidnightExclusive","displayValue","labelValue","jsx","BooleanWidget","DateWidget","isListType","valueArray","enumOptions","item","status","t","MarkdownWidget","TextWidget"],"mappings":"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"}
1
+ {"version":3,"file":"RenderFieldWidget.cjs.js","sources":["../../../../../../src/components/DetailsPanelAttributes/components/RenderFieldWidget.tsx"],"sourcesContent":["import { FC } from 'react'\nimport styled from 'styled-components'\nimport type { CellValue } from '@shared/containers/ProjectTreeTable/widgets/CellWidget'\nimport {\n TextWidget,\n MarkdownWidget,\n BooleanWidget,\n DateWidget,\n EnumWidget,\n} from '@shared/containers/ProjectTreeTable/widgets'\nimport { useScopedStatuses } from '@shared/hooks/useScopedStatuses'\nimport { useScopedTypes } from '@shared/hooks/useScopedTypes'\n// Import AttributeField as a type to avoid runtime circular dependency with DetailsPanelAttributesEditor\nimport type { AttributeField } from '../DetailsPanelAttributesEditor'\nimport type { DetailsPanelEntityData, EnumItem } from '@shared/api'\n\nconst FieldValueText = styled.div`\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-align: right;\n\n input {\n text-align: left;\n }\n`\n\nconst StyledEnumWidget = styled(EnumWidget)`\n .enum,\n .edit-trigger {\n &:hover {\n background-color: unset;\n }\n }\n &:hover {\n background-color: unset;\n }\n`\n\ninterface RenderFieldWidgetProps {\n field: AttributeField\n value: any\n isEditing: boolean\n isReadOnly: boolean\n isMixed: boolean\n onChange: (fieldName: string, value: CellValue | CellValue[]) => void\n onCancelEdit: () => void\n onExpand?: () => void\n entities?: DetailsPanelEntityData[]\n entityType?: string\n}\n\nconst RenderFieldWidget: FC<RenderFieldWidgetProps> = ({\n field,\n value,\n isEditing,\n isReadOnly,\n isMixed,\n onChange,\n onCancelEdit,\n onExpand,\n entities = [],\n entityType = 'task',\n}) => {\n const { type, widget } = field.data\n const widgetCommonProps = {\n isEditing: isEditing && !isReadOnly,\n isReadOnly: isReadOnly,\n isInherited: false,\n onChange: (newValue: CellValue | CellValue[]) => onChange(field.name, newValue),\n }\n\n // Hooks must be called at top level - not inside conditions\n const projectNames = entities.map((entity) => entity.projectName)\n const scopedStatuses = useScopedStatuses(projectNames, [entityType])\n const scopedTypes = useScopedTypes(projectNames, entityType)\n const isMidnightExclusive =\n field.name === 'attrib.endDate' &&\n entities.length > 0 &&\n entities.every((entity) => entity.data?.schedulerSyncData?.allDay === true)\n\n // Format the value for display\n let displayValue = value === null || value === undefined ? '' : value\n const labelValue = field.data.title || field.name\n\n // Handle different field types\n switch (true) {\n case type === 'boolean':\n return (\n <BooleanWidget value={Boolean(displayValue)} {...widgetCommonProps} style={{ margin: 0 }} />\n )\n\n case type === 'datetime':\n return (\n <DateWidget\n value={displayValue}\n {...widgetCommonProps}\n isEditing\n onCancelEdit={onCancelEdit}\n style={{ width: 'fit-content' }}\n autoFocus={false}\n isMidnightExclusive={isMidnightExclusive}\n />\n )\n\n case !!field.data.enum: {\n const isListType = type?.includes('list')\n let valueArray = []\n\n if (isListType) {\n valueArray = Array.isArray(displayValue) ? displayValue : []\n } else if (isMixed) {\n valueArray = []\n } else {\n valueArray = [displayValue]\n }\n\n // Use scoped statuses/types based on field name\n let enumOptions: EnumItem[] = (field.data.enum || []).map((item) => ({\n value: item.value,\n label: item.label,\n icon: typeof item.icon === 'string' ? item.icon : undefined,\n color: item.color,\n }))\n if (\n field.name === 'status' &&\n entities.length > 0 &&\n scopedStatuses &&\n scopedStatuses.length > 0\n ) {\n enumOptions = scopedStatuses.map((status) => ({\n value: status.name,\n label: status.name,\n icon: status.icon,\n color: status.color,\n }))\n }\n if (\n field.name === 'taskType' &&\n entities.length > 0 &&\n scopedTypes &&\n scopedTypes.length > 0\n ) {\n enumOptions = scopedTypes.map((t) => ({\n value: t.name,\n label: t.name,\n icon: t.icon,\n color: t.color,\n }))\n }\n\n if (field.allowNone && !!valueArray.length && !isListType) {\n // Check if current field has a value (for single value fields)\n const hasCurrentValue = displayValue && displayValue !== ''\n if (hasCurrentValue) {\n enumOptions = [\n { value: '', label: `No ${field.data.title || field.name}` },\n ...enumOptions,\n ]\n }\n }\n\n return (\n <StyledEnumWidget\n value={valueArray}\n options={enumOptions}\n type={type}\n pt={{\n template: {\n style: { height: 32 },\n className: 'enum',\n },\n }}\n placeholder={isMixed ? `Mixed ${labelValue}` : `Select ${labelValue}...`}\n onCancelEdit={onCancelEdit}\n align=\"right\"\n enableCustomValues={field.enableCustomValues ?? false}\n search={field.enableSearch ?? enumOptions.length >= 5}\n sortBySelected={!enumOptions}\n {...widgetCommonProps}\n />\n )\n }\n\n case type === 'string' || type === 'integer' || type === 'float':\n default:\n if (widget === 'markdown') {\n return (\n <MarkdownWidget\n value={displayValue.toString()}\n onCancelEdit={onCancelEdit}\n onExpand={onExpand}\n showExpand={!!onExpand}\n {...widgetCommonProps}\n />\n )\n } else {\n return (\n <FieldValueText>\n <TextWidget\n value={displayValue.toString()}\n onCancelEdit={onCancelEdit}\n type={type as 'string' | 'integer' | 'float'}\n {...widgetCommonProps}\n />\n </FieldValueText>\n )\n }\n }\n}\n\nexport default RenderFieldWidget\n"],"names":["FieldValueText","styled","StyledEnumWidget","EnumWidget","RenderFieldWidget","field","value","isEditing","isReadOnly","isMixed","onChange","onCancelEdit","onExpand","entities","entityType","type","widget","widgetCommonProps","newValue","projectNames","entity","scopedStatuses","useScopedStatuses","scopedTypes","useScopedTypes","isMidnightExclusive","displayValue","labelValue","jsx","BooleanWidget","DateWidget","isListType","valueArray","enumOptions","item","status","t","MarkdownWidget","TextWidget"],"mappings":"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"}
@@ -112,18 +112,42 @@ import "../../../api/queries/views/getViews.es.js";
112
112
  import "../../../api/queries/views/updateViews.es.js";
113
113
  import "../../../api/queries/watchers/getWatchers.es.js";
114
114
  import "../../../api/queries/uris/getUris.es.js";
115
- import "../../LinksManager/CellEditingDialog.es.js";
115
+ import "../../../context/RemoteModulesContext.es.js";
116
116
  import "react";
117
+ import "../../../../../_virtual/runtime.es.js";
118
+ import "../../../../../_virtual/semver.es.js";
119
+ import "../../../context/PowerpackContextInstance.es.js";
120
+ import "../../../context/UriContext.es.js";
121
+ import "../../../context/DetailsPanelContextInstance.es.js";
122
+ import "lodash";
123
+ import "react-toastify";
124
+ import "uuid";
125
+ import "../../../util/pubsub.es.js";
126
+ import "../../../context/SubtasksModulesContextInstance.es.js";
127
+ import "../../../context/ThumbnailUploaderContext.es.js";
128
+ import "../../../context/SettingsPanelContext.es.js";
129
+ import "../../../context/pip/PiPProvider.es.js";
130
+ import "react-dom";
131
+ import "../../../context/pip/PiPWrapper.es.js";
132
+ import "../../../context/AddonProjectContext.es.js";
133
+ import "../../../context/AddonContext.es.js";
134
+ import "../../../context/MenuContext.es.js";
135
+ import "../../../context/WebsocketContext.es.js";
136
+ import "../../../context/GlobalContext.es.js";
137
+ import "../../../context/ProjectContext.es.js";
138
+ import "../../../context/ProjectFoldersContextInstance.es.js";
139
+ import "../../../context/EntityUpdatesContextInstance.es.js";
140
+ import "react-redux";
141
+ import "../../../containers/Views/ViewsMenu/ViewsMenu.es.js";
142
+ import "@ynput/ayon-react-components";
143
+ import "../../../containers/Views/context/ViewsContextInstance.es.js";
144
+ import "../../../context/DeleteEntitiesContext.es.js";
145
+ import "../../LinksManager/CellEditingDialog.es.js";
117
146
  import "../../LinksManager/LinksManager.styled.es.js";
118
147
  import "short-uuid";
119
- import "@ynput/ayon-react-components";
120
148
  import "../../SearchFilter/filterDates.es.js";
121
149
  import "date-fns";
122
150
  import "../../../containers/ProjectTreeTable/utils/columnIds.es.js";
123
- import "react-toastify";
124
- import "lodash";
125
- import "uuid";
126
- import "../../../util/pubsub.es.js";
127
151
  import "clsx";
128
152
  import "../../../containers/Feed/components/ActivityCheckbox/ActivityCheckbox.styled.es.js";
129
153
  import "../../../containers/Feed/components/ActivityReference/ActivityReference.styled.es.js";
@@ -132,7 +156,6 @@ import "react-router-dom";
132
156
  import "../../../containers/ProjectTreeTable/context/CellEditingContext.es.js";
133
157
  import "../../../containers/ProjectTreeTable/context/SelectionCellsContext.es.js";
134
158
  import "../../../containers/ProjectTreeTable/context/ProjectTableQueriesContext.es.js";
135
- import "../../../context/ProjectContext.es.js";
136
159
  import "../../../containers/ProjectTreeTable/context/ClipboardContext.es.js";
137
160
  import "@tanstack/react-table";
138
161
  import "../../../containers/ProjectTreeTable/context/ColumnSettingsContext.es.js";
@@ -140,10 +163,7 @@ import "../../../containers/ProjectTreeTable/context/SelectedRowsContext.es.js";
140
163
  import "../../../containers/ProjectTreeTable/context/DetailsPanelEntityContext.es.js";
141
164
  /* empty css */
142
165
  import "../../../containers/ContextMenu/ContextMenuContext.es.js";
143
- import "../../../context/DeleteEntitiesContext.es.js";
144
- import "../../../context/GlobalContext.es.js";
145
166
  import "../../../containers/ProjectTreeTable/context/ProjectDataContextInstance.es.js";
146
- import "../../../context/ProjectFoldersContextInstance.es.js";
147
167
  import "../../../containers/ProjectTreeTable/buildTreeTableColumns.es.js";
148
168
  import "../../../containers/ProjectTreeTable/context/ProjectTableContextInstance.es.js";
149
169
  import "../../../containers/ProjectTreeTable/widgets/EmptyWidget.es.js";
@@ -170,7 +190,7 @@ const C = b.div`
170
190
  &:hover {
171
191
  background-color: unset;
172
192
  }
173
- `, Wr = ({
193
+ `, Jr = ({
174
194
  field: o,
175
195
  value: c,
176
196
  isEditing: w,
@@ -274,6 +294,6 @@ const C = b.div`
274
294
  }
275
295
  };
276
296
  export {
277
- Wr as default
297
+ Jr as default
278
298
  };
279
299
  //# sourceMappingURL=RenderFieldWidget.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RenderFieldWidget.es.js","sources":["../../../../../../src/components/DetailsPanelAttributes/components/RenderFieldWidget.tsx"],"sourcesContent":["import { FC } from 'react'\nimport styled from 'styled-components'\nimport type { CellValue } from '@shared/containers/ProjectTreeTable/widgets/CellWidget'\nimport {\n TextWidget,\n MarkdownWidget,\n BooleanWidget,\n DateWidget,\n EnumWidget,\n} from '@shared/containers/ProjectTreeTable/widgets'\nimport { useScopedStatuses } from '@shared/hooks/useScopedStatuses'\nimport { useScopedTypes } from '@shared/hooks/useScopedTypes'\n// Import AttributeField as a type to avoid runtime circular dependency with DetailsPanelAttributesEditor\nimport type { AttributeField } from '../DetailsPanelAttributesEditor'\nimport type { DetailsPanelEntityData, EnumItem } from '@shared/api'\n\nconst FieldValueText = styled.div`\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-align: right;\n\n input {\n text-align: left;\n }\n`\n\nconst StyledEnumWidget = styled(EnumWidget)`\n .enum,\n .edit-trigger {\n &:hover {\n background-color: unset;\n }\n }\n &:hover {\n background-color: unset;\n }\n`\n\ninterface RenderFieldWidgetProps {\n field: AttributeField\n value: any\n isEditing: boolean\n isReadOnly: boolean\n isMixed: boolean\n onChange: (fieldName: string, value: CellValue | CellValue[]) => void\n onCancelEdit: () => void\n onExpand?: () => void\n entities?: DetailsPanelEntityData[]\n entityType?: string\n}\n\nconst RenderFieldWidget: FC<RenderFieldWidgetProps> = ({\n field,\n value,\n isEditing,\n isReadOnly,\n isMixed,\n onChange,\n onCancelEdit,\n onExpand,\n entities = [],\n entityType = 'task',\n}) => {\n const { type, widget } = field.data\n const widgetCommonProps = {\n isEditing: isEditing && !isReadOnly,\n isReadOnly: isReadOnly,\n isInherited: false,\n onChange: (newValue: CellValue | CellValue[]) => onChange(field.name, newValue),\n }\n\n // Hooks must be called at top level - not inside conditions\n const projectNames = entities.map((entity) => entity.projectName)\n const scopedStatuses = useScopedStatuses(projectNames, [entityType])\n const scopedTypes = useScopedTypes(projectNames, entityType)\n const isMidnightExclusive =\n field.name === 'attrib.endDate' &&\n entities.length > 0 &&\n entities.every((entity) => entity.data?.schedulerSyncData?.allDay === true)\n\n // Format the value for display\n let displayValue = value === null || value === undefined ? '' : value\n const labelValue = field.data.title || field.name\n\n // Handle different field types\n switch (true) {\n case type === 'boolean':\n return (\n <BooleanWidget value={Boolean(displayValue)} {...widgetCommonProps} style={{ margin: 0 }} />\n )\n\n case type === 'datetime':\n return (\n <DateWidget\n value={displayValue}\n {...widgetCommonProps}\n isEditing\n onCancelEdit={onCancelEdit}\n style={{ width: 'fit-content' }}\n autoFocus={false}\n isMidnightExclusive={isMidnightExclusive}\n />\n )\n\n case !!field.data.enum: {\n const isListType = type?.includes('list')\n let valueArray = []\n\n if (isListType) {\n valueArray = Array.isArray(displayValue) ? displayValue : []\n } else if (isMixed) {\n valueArray = []\n } else {\n valueArray = [displayValue]\n }\n\n // Use scoped statuses/types based on field name\n let enumOptions: EnumItem[] = (field.data.enum || []).map((item) => ({\n value: item.value,\n label: item.label,\n icon: typeof item.icon === 'string' ? item.icon : undefined,\n color: item.color,\n }))\n if (\n field.name === 'status' &&\n entities.length > 0 &&\n scopedStatuses &&\n scopedStatuses.length > 0\n ) {\n enumOptions = scopedStatuses.map((status) => ({\n value: status.name,\n label: status.name,\n icon: status.icon,\n color: status.color,\n }))\n }\n if (\n field.name === 'taskType' &&\n entities.length > 0 &&\n scopedTypes &&\n scopedTypes.length > 0\n ) {\n enumOptions = scopedTypes.map((t) => ({\n value: t.name,\n label: t.name,\n icon: t.icon,\n color: t.color,\n }))\n }\n\n if (field.allowNone && !!valueArray.length && !isListType) {\n // Check if current field has a value (for single value fields)\n const hasCurrentValue = displayValue && displayValue !== ''\n if (hasCurrentValue) {\n enumOptions = [\n { value: '', label: `No ${field.data.title || field.name}` },\n ...enumOptions,\n ]\n }\n }\n\n return (\n <StyledEnumWidget\n value={valueArray}\n options={enumOptions}\n type={type}\n pt={{\n template: {\n style: { height: 32 },\n className: 'enum',\n },\n }}\n placeholder={isMixed ? `Mixed ${labelValue}` : `Select ${labelValue}...`}\n onCancelEdit={onCancelEdit}\n align=\"right\"\n enableCustomValues={field.enableCustomValues ?? false}\n search={field.enableSearch ?? enumOptions.length >= 5}\n sortBySelected={!enumOptions}\n {...widgetCommonProps}\n />\n )\n }\n\n case type === 'string' || type === 'integer' || type === 'float':\n default:\n if (widget === 'markdown') {\n return (\n <MarkdownWidget\n value={displayValue.toString()}\n onCancelEdit={onCancelEdit}\n onExpand={onExpand}\n showExpand={!!onExpand}\n {...widgetCommonProps}\n />\n )\n } else {\n return (\n <FieldValueText>\n <TextWidget\n value={displayValue.toString()}\n onCancelEdit={onCancelEdit}\n type={type as 'string' | 'integer' | 'float'}\n {...widgetCommonProps}\n />\n </FieldValueText>\n )\n }\n }\n}\n\nexport default RenderFieldWidget\n"],"names":["FieldValueText","styled","StyledEnumWidget","EnumWidget","RenderFieldWidget","field","value","isEditing","isReadOnly","isMixed","onChange","onCancelEdit","onExpand","entities","entityType","type","widget","widgetCommonProps","newValue","projectNames","entity","scopedStatuses","useScopedStatuses","scopedTypes","useScopedTypes","isMidnightExclusive","displayValue","labelValue","jsx","BooleanWidget","DateWidget","isListType","valueArray","enumOptions","item","status","MarkdownWidget","TextWidget"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBA,MAAMA,IAAiBC,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAYxBC,IAAmBD,EAAOE,CAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAyBpCC,KAAgD,CAAC;AAAA,EACrD,OAAAC;AAAA,EACA,OAAAC;AAAA,EACA,WAAAC;AAAA,EACA,YAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC,IAAW,CAAA;AAAA,EACX,YAAAC,IAAa;AACf,MAAM;AACJ,QAAM,EAAE,MAAAC,GAAM,QAAAC,EAAA,IAAWX,EAAM,MACzBY,IAAoB;AAAA,IACxB,WAAWV,KAAa,CAACC;AAAA,IACzB,YAAAA;AAAA,IACA,aAAa;AAAA,IACb,UAAU,CAACU,MAAsCR,EAASL,EAAM,MAAMa,CAAQ;AAAA,EAAA,GAI1EC,IAAeN,EAAS,IAAI,CAACO,MAAWA,EAAO,WAAW,GAC1DC,IAAiBC,EAAkBH,GAAc,CAACL,CAAU,CAAC,GAC7DS,IAAcC,EAAeL,GAAcL,CAAU,GACrDW,IACJpB,EAAM,SAAS,oBACfQ,EAAS,SAAS,KAClBA,EAAS,MAAM,CAACO,MAAWA,EAAO,MAAM,mBAAmB,WAAW,EAAI;AAG5E,MAAIM,IAAepB,KAAwC;AAC3D,QAAMqB,IAAatB,EAAM,KAAK,SAASA,EAAM;AAG7C,UAAQ,IAAA;AAAA,IACN,KAAKU,MAAS;AACZ,aACEa,gBAAAA,EAAAA,IAACC,GAAA,EAAc,OAAO,EAAQH,GAAgB,GAAGT,GAAmB,OAAO,EAAE,QAAQ,EAAA,EAAE,CAAG;AAAA,IAG9F,KAAKF,MAAS;AACZ,aACEa,gBAAAA,EAAAA;AAAAA,QAACE;AAAA,QAAA;AAAA,UACC,OAAOJ;AAAA,UACN,GAAGT;AAAA,UACJ,WAAS;AAAA,UACT,cAAAN;AAAA,UACA,OAAO,EAAE,OAAO,cAAA;AAAA,UAChB,WAAW;AAAA,UACX,qBAAAc;AAAA,QAAA;AAAA,MAAA;AAAA,IAIN,KAAK,CAAC,CAACpB,EAAM,KAAK,MAAM;AACtB,YAAM0B,IAAahB,GAAM,SAAS,MAAM;AACxC,UAAIiB,IAAa,CAAA;AAEjB,MAAID,IACFC,IAAa,MAAM,QAAQN,CAAY,IAAIA,IAAe,CAAA,IACjDjB,IACTuB,IAAa,CAAA,IAEbA,IAAa,CAACN,CAAY;AAI5B,UAAIO,KAA2B5B,EAAM,KAAK,QAAQ,IAAI,IAAI,CAAC6B,OAAU;AAAA,QACnE,OAAOA,EAAK;AAAA,QACZ,OAAOA,EAAK;AAAA,QACZ,MAAM,OAAOA,EAAK,QAAS,WAAWA,EAAK,OAAO;AAAA,QAClD,OAAOA,EAAK;AAAA,MAAA,EACZ;AACF,aACE7B,EAAM,SAAS,YACfQ,EAAS,SAAS,KAClBQ,KACAA,EAAe,SAAS,MAExBY,IAAcZ,EAAe,IAAI,CAACc,OAAY;AAAA,QAC5C,OAAOA,EAAO;AAAA,QACd,OAAOA,EAAO;AAAA,QACd,MAAMA,EAAO;AAAA,QACb,OAAOA,EAAO;AAAA,MAAA,EACd,IAGF9B,EAAM,SAAS,cACfQ,EAAS,SAAS,KAClBU,KACAA,EAAY,SAAS,MAErBU,IAAcV,EAAY,IAAI,CAAC,OAAO;AAAA,QACpC,OAAO,EAAE;AAAA,QACT,OAAO,EAAE;AAAA,QACT,MAAM,EAAE;AAAA,QACR,OAAO,EAAE;AAAA,MAAA,EACT,IAGAlB,EAAM,aAAe2B,EAAW,UAAU,CAACD,KAErBL,KAAgBA,MAAiB,OAEvDO,IAAc;AAAA,QACZ,EAAE,OAAO,IAAI,OAAO,MAAM5B,EAAM,KAAK,SAASA,EAAM,IAAI,GAAA;AAAA,QACxD,GAAG4B;AAAA,MAAA,IAMPL,gBAAAA,EAAAA;AAAAA,QAAC1B;AAAA,QAAA;AAAA,UACC,OAAO8B;AAAA,UACP,SAASC;AAAA,UACT,MAAAlB;AAAA,UACA,IAAI;AAAA,YACF,UAAU;AAAA,cACR,OAAO,EAAE,QAAQ,GAAA;AAAA,cACjB,WAAW;AAAA,YAAA;AAAA,UACb;AAAA,UAEF,aAAaN,IAAU,SAASkB,CAAU,KAAK,UAAUA,CAAU;AAAA,UACnE,cAAAhB;AAAA,UACA,OAAM;AAAA,UACN,oBAAoBN,EAAM,sBAAsB;AAAA,UAChD,QAAQA,EAAM,gBAAgB4B,EAAY,UAAU;AAAA,UACpD,gBAAgB,CAACA;AAAA,UAChB,GAAGhB;AAAA,QAAA;AAAA,MAAA;AAAA,IAGV;AAAA,IAEA,MAAKF,MAAS,YAAYA,MAAS,aAAaA,MAAS;AAAA,IACzD;AACE,aAAIC,MAAW,aAEXY,gBAAAA,EAAAA;AAAAA,QAACQ;AAAA,QAAA;AAAA,UACC,OAAOV,EAAa,SAAA;AAAA,UACpB,cAAAf;AAAA,UACA,UAAAC;AAAA,UACA,YAAY,CAAC,CAACA;AAAA,UACb,GAAGK;AAAA,QAAA;AAAA,MAAA,0BAKLjB,GAAA,EACC,UAAA4B,gBAAAA,EAAAA;AAAAA,QAACS;AAAA,QAAA;AAAA,UACC,OAAOX,EAAa,SAAA;AAAA,UACpB,cAAAf;AAAA,UACA,MAAAI;AAAA,UACC,GAAGE;AAAA,QAAA;AAAA,MAAA,GAER;AAAA,EAEJ;AAEN;"}
1
+ {"version":3,"file":"RenderFieldWidget.es.js","sources":["../../../../../../src/components/DetailsPanelAttributes/components/RenderFieldWidget.tsx"],"sourcesContent":["import { FC } from 'react'\nimport styled from 'styled-components'\nimport type { CellValue } from '@shared/containers/ProjectTreeTable/widgets/CellWidget'\nimport {\n TextWidget,\n MarkdownWidget,\n BooleanWidget,\n DateWidget,\n EnumWidget,\n} from '@shared/containers/ProjectTreeTable/widgets'\nimport { useScopedStatuses } from '@shared/hooks/useScopedStatuses'\nimport { useScopedTypes } from '@shared/hooks/useScopedTypes'\n// Import AttributeField as a type to avoid runtime circular dependency with DetailsPanelAttributesEditor\nimport type { AttributeField } from '../DetailsPanelAttributesEditor'\nimport type { DetailsPanelEntityData, EnumItem } from '@shared/api'\n\nconst FieldValueText = styled.div`\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-align: right;\n\n input {\n text-align: left;\n }\n`\n\nconst StyledEnumWidget = styled(EnumWidget)`\n .enum,\n .edit-trigger {\n &:hover {\n background-color: unset;\n }\n }\n &:hover {\n background-color: unset;\n }\n`\n\ninterface RenderFieldWidgetProps {\n field: AttributeField\n value: any\n isEditing: boolean\n isReadOnly: boolean\n isMixed: boolean\n onChange: (fieldName: string, value: CellValue | CellValue[]) => void\n onCancelEdit: () => void\n onExpand?: () => void\n entities?: DetailsPanelEntityData[]\n entityType?: string\n}\n\nconst RenderFieldWidget: FC<RenderFieldWidgetProps> = ({\n field,\n value,\n isEditing,\n isReadOnly,\n isMixed,\n onChange,\n onCancelEdit,\n onExpand,\n entities = [],\n entityType = 'task',\n}) => {\n const { type, widget } = field.data\n const widgetCommonProps = {\n isEditing: isEditing && !isReadOnly,\n isReadOnly: isReadOnly,\n isInherited: false,\n onChange: (newValue: CellValue | CellValue[]) => onChange(field.name, newValue),\n }\n\n // Hooks must be called at top level - not inside conditions\n const projectNames = entities.map((entity) => entity.projectName)\n const scopedStatuses = useScopedStatuses(projectNames, [entityType])\n const scopedTypes = useScopedTypes(projectNames, entityType)\n const isMidnightExclusive =\n field.name === 'attrib.endDate' &&\n entities.length > 0 &&\n entities.every((entity) => entity.data?.schedulerSyncData?.allDay === true)\n\n // Format the value for display\n let displayValue = value === null || value === undefined ? '' : value\n const labelValue = field.data.title || field.name\n\n // Handle different field types\n switch (true) {\n case type === 'boolean':\n return (\n <BooleanWidget value={Boolean(displayValue)} {...widgetCommonProps} style={{ margin: 0 }} />\n )\n\n case type === 'datetime':\n return (\n <DateWidget\n value={displayValue}\n {...widgetCommonProps}\n isEditing\n onCancelEdit={onCancelEdit}\n style={{ width: 'fit-content' }}\n autoFocus={false}\n isMidnightExclusive={isMidnightExclusive}\n />\n )\n\n case !!field.data.enum: {\n const isListType = type?.includes('list')\n let valueArray = []\n\n if (isListType) {\n valueArray = Array.isArray(displayValue) ? displayValue : []\n } else if (isMixed) {\n valueArray = []\n } else {\n valueArray = [displayValue]\n }\n\n // Use scoped statuses/types based on field name\n let enumOptions: EnumItem[] = (field.data.enum || []).map((item) => ({\n value: item.value,\n label: item.label,\n icon: typeof item.icon === 'string' ? item.icon : undefined,\n color: item.color,\n }))\n if (\n field.name === 'status' &&\n entities.length > 0 &&\n scopedStatuses &&\n scopedStatuses.length > 0\n ) {\n enumOptions = scopedStatuses.map((status) => ({\n value: status.name,\n label: status.name,\n icon: status.icon,\n color: status.color,\n }))\n }\n if (\n field.name === 'taskType' &&\n entities.length > 0 &&\n scopedTypes &&\n scopedTypes.length > 0\n ) {\n enumOptions = scopedTypes.map((t) => ({\n value: t.name,\n label: t.name,\n icon: t.icon,\n color: t.color,\n }))\n }\n\n if (field.allowNone && !!valueArray.length && !isListType) {\n // Check if current field has a value (for single value fields)\n const hasCurrentValue = displayValue && displayValue !== ''\n if (hasCurrentValue) {\n enumOptions = [\n { value: '', label: `No ${field.data.title || field.name}` },\n ...enumOptions,\n ]\n }\n }\n\n return (\n <StyledEnumWidget\n value={valueArray}\n options={enumOptions}\n type={type}\n pt={{\n template: {\n style: { height: 32 },\n className: 'enum',\n },\n }}\n placeholder={isMixed ? `Mixed ${labelValue}` : `Select ${labelValue}...`}\n onCancelEdit={onCancelEdit}\n align=\"right\"\n enableCustomValues={field.enableCustomValues ?? false}\n search={field.enableSearch ?? enumOptions.length >= 5}\n sortBySelected={!enumOptions}\n {...widgetCommonProps}\n />\n )\n }\n\n case type === 'string' || type === 'integer' || type === 'float':\n default:\n if (widget === 'markdown') {\n return (\n <MarkdownWidget\n value={displayValue.toString()}\n onCancelEdit={onCancelEdit}\n onExpand={onExpand}\n showExpand={!!onExpand}\n {...widgetCommonProps}\n />\n )\n } else {\n return (\n <FieldValueText>\n <TextWidget\n value={displayValue.toString()}\n onCancelEdit={onCancelEdit}\n type={type as 'string' | 'integer' | 'float'}\n {...widgetCommonProps}\n />\n </FieldValueText>\n )\n }\n }\n}\n\nexport default RenderFieldWidget\n"],"names":["FieldValueText","styled","StyledEnumWidget","EnumWidget","RenderFieldWidget","field","value","isEditing","isReadOnly","isMixed","onChange","onCancelEdit","onExpand","entities","entityType","type","widget","widgetCommonProps","newValue","projectNames","entity","scopedStatuses","useScopedStatuses","scopedTypes","useScopedTypes","isMidnightExclusive","displayValue","labelValue","jsx","BooleanWidget","DateWidget","isListType","valueArray","enumOptions","item","status","MarkdownWidget","TextWidget"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("../../../../_virtual/jsx-runtime.cjs.js"),t=require("../../containers/ProjectTreeTable/buildTreeTableColumns.cjs.js"),o=require("../../containers/ProjectTreeTable/utils/columnIds.cjs.js"),k=require("../../containers/ProjectTreeTable/utils/checkColumnVisibility.cjs.js"),B=require("../../containers/ProjectTreeTable/context/ColumnSettingsContext.cjs.js"),N=require("../../containers/ProjectTreeTable/context/ProjectTableContext.cjs.js"),_=require("@ynput/ayon-react-components"),w=require("styled-components"),E=require("../../context/ProjectContext.cjs.js"),R=require("../../context/SettingsPanelContext.cjs.js"),z=require("../SettingsPanel/SettingsPanel.cjs.js"),M=require("./ColumnsSettings.cjs.js"),O=require("../SizeSlider/SizeSlider.cjs.js"),A=require("../../containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js"),U=require("../../containers/ProjectTreeTable/hooks/useSortBySettings.cjs.js"),D=w(_.Button)`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("../../../../_virtual/jsx-runtime.cjs.js"),t=require("../../containers/ProjectTreeTable/buildTreeTableColumns.cjs.js"),o=require("../../containers/ProjectTreeTable/utils/columnIds.cjs.js"),k=require("../../containers/ProjectTreeTable/utils/checkColumnVisibility.cjs.js"),B=require("../../containers/ProjectTreeTable/context/ColumnSettingsContext.cjs.js"),N=require("../../containers/ProjectTreeTable/context/ProjectTableContext.cjs.js"),_=require("@ynput/ayon-react-components"),w=require("styled-components"),E=require("../../context/ProjectContext.cjs.js"),R=require("../../context/SettingsPanelContext.cjs.js"),z=require("../SettingsPanel/SettingsPanel.cjs.js"),M=require("./ColumnsSettings.cjs.js"),O=require("../SizeSlider/SizeSlider.cjs.js"),A=require("../../containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js"),D=require("../../containers/ProjectTreeTable/hooks/useSortBySettings.cjs.js"),U=w(_.Button)`
2
2
  min-width: 120px;
3
- `,V=({defaultSelected:u,className:b,...a})=>{const{togglePanel:r,isPanelOpen:c}=R.useSettingsPanel();return i.jsxRuntimeExports.jsx(D,{onClick:()=>r(u),icon:"settings",selected:c,...a,children:"Customize"})},Y=({settings:u=[],extraColumns:b=[],hiddenColumns:a=[],hiddenSettings:r=[],highlighted:c,includeLinks:p=!0,hideSortBy:h=!1,order:S,scope:v})=>{const{...g}=E.useProjectContext(),{attribFields:x,scopes:n}=N.useProjectTableContext(),{columnVisibility:y,defaultColumnVisibility:L,rowHeight:T=34,updateRowHeight:j,updateRowHeightWithPersistence:f}=B.useColumnSettingsContext(),C=[{value:"thumbnail",label:t.getColumnLabel("thumbnail")},{value:"name",label:n.map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join("/")+" Name"},{value:o.ENTITY_COLUMN_IDS.folder,label:t.getColumnLabel(o.ENTITY_COLUMN_IDS.folder)},{value:o.ENTITY_COLUMN_IDS.task,label:t.getColumnLabel(o.ENTITY_COLUMN_IDS.task),hidden:!["product","version"].some(e=>n.includes(e))},{value:"assignees",label:t.getColumnLabel("assignees"),hidden:!n.includes("task")},{value:"product",label:t.getColumnLabel("product"),hidden:["product","version"].some(e=>!n.includes(e))},{value:"entityType",label:t.getColumnLabel("entityType")},{value:"status",label:t.getColumnLabel("status")},{value:"subType",label:t.getColumnLabel("subType",n)},{value:"tags",label:t.getColumnLabel("tags")},{value:"createdAt",label:t.getColumnLabel("createdAt")},{value:"updatedAt",label:t.getColumnLabel("updatedAt")},{value:"subtasks",label:t.getColumnLabel("subtasks"),hidden:!n.includes("task")},{value:"comments",label:t.getColumnLabel("comments"),hidden:!n.some(e=>["task","version","product","folder"].includes(e))},...x.filter(e=>e.scope?.some(l=>n.includes(l))).map(e=>({value:`attrib_${e.name}`,label:e.data.title||e.name})),...g?.linkTypes&&p?g.linkTypes.filter(e=>[e.inputType,e.outputType].some(l=>n.includes(l))).flatMap(e=>[{value:t.getLinkColumnId(e,"in"),label:t.getLinkLabel(e,"in")},{value:t.getLinkColumnId(e,"out"),label:t.getLinkLabel(e,"out")}]):[],...b],d=C.filter(e=>!e.hidden&&!a.includes(e.value)),q=d.filter(e=>k.checkColumnVisibility(y,e.value,L)).length,I=A.useGroupBySettings({scope:v}),P=U.useSortBySettings(C),s=[{id:"columns",title:"Columns",icon:"view_column",preview:`${q}/${d.length}`,component:i.jsxRuntimeExports.jsx(M.ColumnsSettingsWithContext,{columns:d,highlighted:c})},h?null:P,I,{id:"row-height",component:i.jsxRuntimeExports.jsx(O.SizeSlider,{value:T,onChange:j,onChangeComplete:f,title:"Row height",id:"row-height-slider"})}].filter(Boolean);return u.forEach(e=>{if(r.includes(e.id))return;const l=s.findIndex(m=>m&&"id"in m&&m.id===e.id);l!==-1?s[l]=e:s.push(e)}),i.jsxRuntimeExports.jsx(z.SettingsPanel,{settings:s,order:S})};exports.CustomizeButton=V;exports.ProjectTableSettings=Y;
3
+ `,V=({defaultSelected:u,className:b,...a})=>{const{togglePanel:r,isPanelOpen:c}=R.useSettingsPanel();return i.jsxRuntimeExports.jsx(U,{onClick:()=>r(u),icon:"settings",selected:c,...a,children:"Customize"})},Y=({settings:u=[],extraColumns:b=[],hiddenColumns:a=[],hiddenSettings:r=[],highlighted:c,includeLinks:p=!0,hideSortBy:S=!1,order:h,scope:v})=>{const{...g}=E.useProjectContext(),{attribFields:x,scopes:n}=N.useProjectTableContext(),{columnVisibility:y,defaultColumnVisibility:L,rowHeight:T=34,updateRowHeight:j,updateRowHeightWithPersistence:f}=B.useColumnSettingsContext(),C=[{value:"thumbnail",label:t.getColumnLabel("thumbnail")},{value:"name",label:t.getNameColumnLabel(n)},{value:o.ENTITY_COLUMN_IDS.folder,label:t.getColumnLabel(o.ENTITY_COLUMN_IDS.folder)},{value:o.ENTITY_COLUMN_IDS.task,label:t.getColumnLabel(o.ENTITY_COLUMN_IDS.task),hidden:!["product","version"].some(e=>n.includes(e))},{value:"assignees",label:t.getColumnLabel("assignees"),hidden:!n.includes("task")},{value:"product",label:t.getColumnLabel("product"),hidden:!["product","version"].some(e=>n.includes(e))},{value:"entityType",label:t.getColumnLabel("entityType")},{value:"status",label:t.getColumnLabel("status")},{value:"subType",label:t.getColumnLabel("subType",n)},{value:"tags",label:t.getColumnLabel("tags")},{value:"createdAt",label:t.getColumnLabel("createdAt")},{value:"updatedAt",label:t.getColumnLabel("updatedAt")},{value:"subtasks",label:t.getColumnLabel("subtasks"),hidden:!n.includes("task")},{value:"comments",label:t.getColumnLabel("comments"),hidden:!n.some(e=>["task","version","product","folder"].includes(e))},...x.filter(e=>e.scope?.some(l=>n.includes(l))).map(e=>({value:`attrib_${e.name}`,label:e.data.title||e.name})),...g?.linkTypes&&p?g.linkTypes.filter(e=>[e.inputType,e.outputType].some(l=>n.includes(l))).flatMap(e=>[{value:t.getLinkColumnId(e,"in"),label:t.getLinkLabel(e,"in")},{value:t.getLinkColumnId(e,"out"),label:t.getLinkLabel(e,"out")}]):[],...b],d=C.filter(e=>!e.hidden&&!a.includes(e.value)),q=d.filter(e=>k.checkColumnVisibility(y,e.value,L)).length,I=A.useGroupBySettings({scope:v}),P=D.useSortBySettings(C),s=[{id:"columns",title:"Columns",icon:"view_column",preview:`${q}/${d.length}`,component:i.jsxRuntimeExports.jsx(M.ColumnsSettingsWithContext,{columns:d,highlighted:c})},S?null:P,I,{id:"row-height",component:i.jsxRuntimeExports.jsx(O.SizeSlider,{value:T,onChange:j,onChangeComplete:f,title:"Row height",id:"row-height-slider"})}].filter(Boolean);return u.forEach(e=>{if(r.includes(e.id))return;const l=s.findIndex(m=>m&&"id"in m&&m.id===e.id);l!==-1?s[l]=e:s.push(e)}),i.jsxRuntimeExports.jsx(z.SettingsPanel,{settings:s,order:h})};exports.CustomizeButton=V;exports.ProjectTableSettings=Y;
4
4
  //# sourceMappingURL=ProjectTableSettings.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectTableSettings.cjs.js","sources":["../../../../../src/components/ProjectTableSettings/ProjectTableSettings.tsx"],"sourcesContent":["import {\n getLinkColumnId,\n getLinkLabel,\n getColumnLabel,\n} from '@shared/containers/ProjectTreeTable/buildTreeTableColumns'\nimport { ENTITY_COLUMN_IDS } from '@shared/containers/ProjectTreeTable/utils/columnIds'\nimport { checkColumnVisibility } from '@shared/containers/ProjectTreeTable/utils/checkColumnVisibility'\nimport { useColumnSettingsContext } from '@shared/containers/ProjectTreeTable/context/ColumnSettingsContext'\nimport { useProjectTableContext } from '@shared/containers/ProjectTreeTable/context/ProjectTableContext'\nimport { Button, ButtonProps } from '@ynput/ayon-react-components'\nimport { FC } from 'react'\nimport styled from 'styled-components'\nimport type { SettingHighlightedId } from '@shared/context/SettingsPanelContext'\nimport { useProjectContext } from '@shared/context/ProjectContext'\nimport { useSettingsPanel } from '@shared/context/SettingsPanelContext'\nimport { SettingsPanel } from '@shared/components/SettingsPanel/SettingsPanel'\nimport type { SettingConfig } from '@shared/components/SettingsPanel/SettingsPanel'\nimport { ColumnsSettingsWithContext } from './ColumnsSettings'\nimport { SizeSlider } from '../SizeSlider'\nimport { useGroupBySettings } from '@shared/containers/ProjectTreeTable/hooks/useGroupBySettings'\nimport { useSortBySettings } from '@shared/containers/ProjectTreeTable/hooks/useSortBySettings'\n\nconst StyledCustomizeButton = styled(Button)`\n min-width: 120px;\n`\n\ninterface Props extends ButtonProps {\n defaultSelected?: string | null\n}\n\nexport const CustomizeButton = ({ defaultSelected, className, ...props }: Props) => {\n const { togglePanel, isPanelOpen } = useSettingsPanel()\n\n return (\n <StyledCustomizeButton\n onClick={() => togglePanel(defaultSelected)}\n icon=\"settings\"\n selected={isPanelOpen}\n {...props}\n >\n Customize\n </StyledCustomizeButton>\n )\n}\n\nexport type OverviewSettingsChange = (setting: 'columns' | 'group-by', value: any) => void\n\nexport type ProjectTableSettingsProps = {\n settings?: SettingConfig[]\n extraColumns?: { value: string; label: string }[]\n hiddenColumns?: string[]\n hiddenSettings?: ('columns' | 'row-height' | 'group-by' | 'sort-by')[]\n highlighted?: SettingHighlightedId\n includeLinks?: boolean\n hideSortBy?: boolean\n order?: string[]\n scope?: string\n}\n\nexport const ProjectTableSettings: FC<ProjectTableSettingsProps> = ({\n settings = [],\n extraColumns = [],\n hiddenColumns = [],\n hiddenSettings = [],\n highlighted,\n includeLinks = true,\n hideSortBy = false,\n order,\n scope,\n}) => {\n const { ...projectInfo } = useProjectContext()\n const { attribFields, scopes } = useProjectTableContext()\n const {\n columnVisibility,\n defaultColumnVisibility,\n rowHeight = 34,\n updateRowHeight,\n updateRowHeightWithPersistence,\n } = useColumnSettingsContext()\n\n const columns: {\n value: string\n label: string\n hidden?: boolean\n }[] = [\n {\n value: 'thumbnail',\n label: getColumnLabel('thumbnail'),\n },\n {\n value: 'name',\n label:\n scopes.map((scope) => scope.charAt(0).toUpperCase() + scope.slice(1)).join('/') + ' Name',\n },\n {\n value: ENTITY_COLUMN_IDS.folder,\n label: getColumnLabel(ENTITY_COLUMN_IDS.folder),\n },\n {\n value: ENTITY_COLUMN_IDS.task,\n label: getColumnLabel(ENTITY_COLUMN_IDS.task),\n hidden: !['product', 'version'].some((scope) => scopes.includes(scope)),\n },\n {\n value: 'assignees',\n label: getColumnLabel('assignees'),\n hidden: !scopes.includes('task'),\n },\n {\n value: 'product',\n label: getColumnLabel('product'),\n hidden: ['product', 'version'].some((scope) => !scopes.includes(scope)),\n },\n {\n value: 'entityType',\n label: getColumnLabel('entityType'),\n },\n {\n value: 'status',\n label: getColumnLabel('status'),\n },\n {\n value: 'subType',\n label: getColumnLabel('subType', scopes),\n },\n {\n value: 'tags',\n label: getColumnLabel('tags'),\n },\n {\n value: 'createdAt',\n label: getColumnLabel('createdAt'),\n },\n {\n value: 'updatedAt',\n label: getColumnLabel('updatedAt'),\n },\n {\n value: 'subtasks',\n label: getColumnLabel('subtasks'),\n hidden: !scopes.includes('task'),\n },\n {\n value: 'comments',\n label: getColumnLabel('comments'),\n hidden: !scopes.some((scope) => ['task', 'version', 'product', 'folder'].includes(scope)),\n },\n ...attribFields\n .filter((field) => field.scope?.some((scope) => scopes.includes(scope)))\n .map((field) => ({\n value: `attrib_${field.name}`,\n label: field.data.title || field.name,\n })),\n ...(projectInfo?.linkTypes && includeLinks\n ? projectInfo.linkTypes\n .filter((link) => [link.inputType, link.outputType].some((type) => scopes.includes(type)))\n .flatMap((link) => [\n {\n value: getLinkColumnId(link, 'in'),\n label: getLinkLabel(link, 'in'),\n },\n {\n value: getLinkColumnId(link, 'out'),\n label: getLinkLabel(link, 'out'),\n },\n ])\n : []),\n ...extraColumns,\n ]\n\n const visibleColumns = columns.filter(\n (column) => !column.hidden && !hiddenColumns.includes(column.value),\n )\n\n const visibleCount = visibleColumns.filter((column) =>\n checkColumnVisibility(columnVisibility, column.value, defaultColumnVisibility),\n ).length\n\n const groupBySettings = useGroupBySettings({ scope })\n const sortBySettings = useSortBySettings(columns)\n\n const defaultSettings: (SettingConfig | undefined | null)[] = [\n {\n id: 'columns',\n title: 'Columns',\n icon: 'view_column',\n preview: `${visibleCount}/${visibleColumns.length}`,\n component: <ColumnsSettingsWithContext columns={visibleColumns} highlighted={highlighted} />,\n },\n hideSortBy ? null : sortBySettings,\n groupBySettings,\n {\n id: 'row-height',\n component: (\n <SizeSlider\n value={rowHeight}\n onChange={updateRowHeight}\n onChangeComplete={updateRowHeightWithPersistence}\n title=\"Row height\"\n id=\"row-height-slider\"\n />\n ),\n },\n ].filter(Boolean)\n\n // Merge extra settings: replace defaults with matching ids, append the rest\n settings.forEach((setting) => {\n if (hiddenSettings.includes(setting.id as any)) return\n const existingIndex = defaultSettings.findIndex((s) => s && 'id' in s && s.id === setting.id)\n if (existingIndex !== -1) {\n defaultSettings[existingIndex] = setting\n } else {\n defaultSettings.push(setting)\n }\n })\n return <SettingsPanel settings={defaultSettings as SettingConfig[]} order={order} />\n}\n"],"names":["StyledCustomizeButton","styled","Button","CustomizeButton","defaultSelected","className","props","togglePanel","isPanelOpen","useSettingsPanel","jsx","ProjectTableSettings","settings","extraColumns","hiddenColumns","hiddenSettings","highlighted","includeLinks","hideSortBy","order","scope","projectInfo","useProjectContext","attribFields","scopes","useProjectTableContext","columnVisibility","defaultColumnVisibility","rowHeight","updateRowHeight","updateRowHeightWithPersistence","useColumnSettingsContext","columns","getColumnLabel","ENTITY_COLUMN_IDS","field","link","type","getLinkColumnId","getLinkLabel","visibleColumns","column","visibleCount","checkColumnVisibility","groupBySettings","useGroupBySettings","sortBySettings","useSortBySettings","defaultSettings","ColumnsSettingsWithContext","SizeSlider","setting","existingIndex","s","SettingsPanel"],"mappings":"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"}
1
+ {"version":3,"file":"ProjectTableSettings.cjs.js","sources":["../../../../../src/components/ProjectTableSettings/ProjectTableSettings.tsx"],"sourcesContent":["import {\n getLinkColumnId,\n getLinkLabel,\n getColumnLabel,\n getNameColumnLabel,\n} from '@shared/containers/ProjectTreeTable/buildTreeTableColumns'\nimport { ENTITY_COLUMN_IDS } from '@shared/containers/ProjectTreeTable/utils/columnIds'\nimport { checkColumnVisibility } from '@shared/containers/ProjectTreeTable/utils/checkColumnVisibility'\nimport { useColumnSettingsContext } from '@shared/containers/ProjectTreeTable/context/ColumnSettingsContext'\nimport { useProjectTableContext } from '@shared/containers/ProjectTreeTable/context/ProjectTableContext'\nimport { Button, ButtonProps } from '@ynput/ayon-react-components'\nimport { FC } from 'react'\nimport styled from 'styled-components'\nimport type { SettingHighlightedId } from '@shared/context/SettingsPanelContext'\nimport { useProjectContext } from '@shared/context/ProjectContext'\nimport { useSettingsPanel } from '@shared/context/SettingsPanelContext'\nimport { SettingsPanel } from '@shared/components/SettingsPanel/SettingsPanel'\nimport type { SettingConfig } from '@shared/components/SettingsPanel/SettingsPanel'\nimport { ColumnsSettingsWithContext } from './ColumnsSettings'\nimport { SizeSlider } from '../SizeSlider'\nimport { useGroupBySettings } from '@shared/containers/ProjectTreeTable/hooks/useGroupBySettings'\nimport { useSortBySettings } from '@shared/containers/ProjectTreeTable/hooks/useSortBySettings'\n\nconst StyledCustomizeButton = styled(Button)`\n min-width: 120px;\n`\n\ninterface Props extends ButtonProps {\n defaultSelected?: string | null\n}\n\nexport const CustomizeButton = ({ defaultSelected, className, ...props }: Props) => {\n const { togglePanel, isPanelOpen } = useSettingsPanel()\n\n return (\n <StyledCustomizeButton\n onClick={() => togglePanel(defaultSelected)}\n icon=\"settings\"\n selected={isPanelOpen}\n {...props}\n >\n Customize\n </StyledCustomizeButton>\n )\n}\n\nexport type OverviewSettingsChange = (setting: 'columns' | 'group-by', value: any) => void\n\nexport type ProjectTableSettingsProps = {\n settings?: SettingConfig[]\n extraColumns?: { value: string; label: string }[]\n hiddenColumns?: string[]\n hiddenSettings?: ('columns' | 'row-height' | 'group-by' | 'sort-by')[]\n highlighted?: SettingHighlightedId\n includeLinks?: boolean\n hideSortBy?: boolean\n order?: string[]\n scope?: string\n}\n\nexport const ProjectTableSettings: FC<ProjectTableSettingsProps> = ({\n settings = [],\n extraColumns = [],\n hiddenColumns = [],\n hiddenSettings = [],\n highlighted,\n includeLinks = true,\n hideSortBy = false,\n order,\n scope,\n}) => {\n const { ...projectInfo } = useProjectContext()\n const { attribFields, scopes } = useProjectTableContext()\n const {\n columnVisibility,\n defaultColumnVisibility,\n rowHeight = 34,\n updateRowHeight,\n updateRowHeightWithPersistence,\n } = useColumnSettingsContext()\n\n const columns: {\n value: string\n label: string\n hidden?: boolean\n }[] = [\n {\n value: 'thumbnail',\n label: getColumnLabel('thumbnail'),\n },\n {\n value: 'name',\n label: getNameColumnLabel(scopes),\n },\n {\n value: ENTITY_COLUMN_IDS.folder,\n label: getColumnLabel(ENTITY_COLUMN_IDS.folder),\n },\n {\n value: ENTITY_COLUMN_IDS.task,\n label: getColumnLabel(ENTITY_COLUMN_IDS.task),\n hidden: !['product', 'version'].some((scope) => scopes.includes(scope)),\n },\n {\n value: 'assignees',\n label: getColumnLabel('assignees'),\n hidden: !scopes.includes('task'),\n },\n {\n value: 'product',\n label: getColumnLabel('product'),\n hidden: !['product', 'version'].some((scope) => scopes.includes(scope)),\n },\n {\n value: 'entityType',\n label: getColumnLabel('entityType'),\n },\n {\n value: 'status',\n label: getColumnLabel('status'),\n },\n {\n value: 'subType',\n label: getColumnLabel('subType', scopes),\n },\n {\n value: 'tags',\n label: getColumnLabel('tags'),\n },\n {\n value: 'createdAt',\n label: getColumnLabel('createdAt'),\n },\n {\n value: 'updatedAt',\n label: getColumnLabel('updatedAt'),\n },\n {\n value: 'subtasks',\n label: getColumnLabel('subtasks'),\n hidden: !scopes.includes('task'),\n },\n {\n value: 'comments',\n label: getColumnLabel('comments'),\n hidden: !scopes.some((scope) => ['task', 'version', 'product', 'folder'].includes(scope)),\n },\n ...attribFields\n .filter((field) => field.scope?.some((scope) => scopes.includes(scope)))\n .map((field) => ({\n value: `attrib_${field.name}`,\n label: field.data.title || field.name,\n })),\n ...(projectInfo?.linkTypes && includeLinks\n ? projectInfo.linkTypes\n .filter((link) => [link.inputType, link.outputType].some((type) => scopes.includes(type)))\n .flatMap((link) => [\n {\n value: getLinkColumnId(link, 'in'),\n label: getLinkLabel(link, 'in'),\n },\n {\n value: getLinkColumnId(link, 'out'),\n label: getLinkLabel(link, 'out'),\n },\n ])\n : []),\n ...extraColumns,\n ]\n\n const visibleColumns = columns.filter(\n (column) => !column.hidden && !hiddenColumns.includes(column.value),\n )\n\n const visibleCount = visibleColumns.filter((column) =>\n checkColumnVisibility(columnVisibility, column.value, defaultColumnVisibility),\n ).length\n\n const groupBySettings = useGroupBySettings({ scope })\n const sortBySettings = useSortBySettings(columns)\n\n const defaultSettings: (SettingConfig | undefined | null)[] = [\n {\n id: 'columns',\n title: 'Columns',\n icon: 'view_column',\n preview: `${visibleCount}/${visibleColumns.length}`,\n component: <ColumnsSettingsWithContext columns={visibleColumns} highlighted={highlighted} />,\n },\n hideSortBy ? null : sortBySettings,\n groupBySettings,\n {\n id: 'row-height',\n component: (\n <SizeSlider\n value={rowHeight}\n onChange={updateRowHeight}\n onChangeComplete={updateRowHeightWithPersistence}\n title=\"Row height\"\n id=\"row-height-slider\"\n />\n ),\n },\n ].filter(Boolean)\n\n // Merge extra settings: replace defaults with matching ids, append the rest\n settings.forEach((setting) => {\n if (hiddenSettings.includes(setting.id as any)) return\n const existingIndex = defaultSettings.findIndex((s) => s && 'id' in s && s.id === setting.id)\n if (existingIndex !== -1) {\n defaultSettings[existingIndex] = setting\n } else {\n defaultSettings.push(setting)\n }\n })\n return <SettingsPanel settings={defaultSettings as SettingConfig[]} order={order} />\n}\n"],"names":["StyledCustomizeButton","styled","Button","CustomizeButton","defaultSelected","className","props","togglePanel","isPanelOpen","useSettingsPanel","jsx","ProjectTableSettings","settings","extraColumns","hiddenColumns","hiddenSettings","highlighted","includeLinks","hideSortBy","order","scope","projectInfo","useProjectContext","attribFields","scopes","useProjectTableContext","columnVisibility","defaultColumnVisibility","rowHeight","updateRowHeight","updateRowHeightWithPersistence","useColumnSettingsContext","columns","getColumnLabel","getNameColumnLabel","ENTITY_COLUMN_IDS","field","link","type","getLinkColumnId","getLinkLabel","visibleColumns","column","visibleCount","checkColumnVisibility","groupBySettings","useGroupBySettings","sortBySettings","useSortBySettings","defaultSettings","ColumnsSettingsWithContext","SizeSlider","setting","existingIndex","s","SettingsPanel"],"mappings":"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"}
@@ -1,24 +1,24 @@
1
1
  import { j as n } from "../../../../_virtual/jsx-runtime.es.js";
2
- import { getColumnLabel as t, getLinkLabel as g, getLinkColumnId as h } from "../../containers/ProjectTreeTable/buildTreeTableColumns.es.js";
2
+ import { getColumnLabel as t, getNameColumnLabel as z, getLinkLabel as f, getLinkColumnId as h } from "../../containers/ProjectTreeTable/buildTreeTableColumns.es.js";
3
3
  import { ENTITY_COLUMN_IDS as s } from "../../containers/ProjectTreeTable/utils/columnIds.es.js";
4
- import { checkColumnVisibility as L } from "../../containers/ProjectTreeTable/utils/checkColumnVisibility.es.js";
5
- import { useColumnSettingsContext as z } from "../../containers/ProjectTreeTable/context/ColumnSettingsContext.es.js";
6
- import { useProjectTableContext as N } from "../../containers/ProjectTreeTable/context/ProjectTableContext.es.js";
7
- import { Button as R } from "@ynput/ayon-react-components";
8
- import _ from "styled-components";
9
- import { useProjectContext as E } from "../../context/ProjectContext.es.js";
10
- import { useSettingsPanel as H } from "../../context/SettingsPanelContext.es.js";
11
- import { SettingsPanel as V } from "../SettingsPanel/SettingsPanel.es.js";
12
- import { ColumnsSettingsWithContext as $ } from "./ColumnsSettings.es.js";
13
- import { SizeSlider as M } from "../SizeSlider/SizeSlider.es.js";
14
- import { useGroupBySettings as O } from "../../containers/ProjectTreeTable/hooks/useGroupBySettings.es.js";
15
- import { useSortBySettings as U } from "../../containers/ProjectTreeTable/hooks/useSortBySettings.es.js";
16
- const W = _(R)`
4
+ import { checkColumnVisibility as A } from "../../containers/ProjectTreeTable/utils/checkColumnVisibility.es.js";
5
+ import { useColumnSettingsContext as N } from "../../containers/ProjectTreeTable/context/ColumnSettingsContext.es.js";
6
+ import { useProjectTableContext as R } from "../../containers/ProjectTreeTable/context/ProjectTableContext.es.js";
7
+ import { Button as _ } from "@ynput/ayon-react-components";
8
+ import E from "styled-components";
9
+ import { useProjectContext as H } from "../../context/ProjectContext.es.js";
10
+ import { useSettingsPanel as V } from "../../context/SettingsPanelContext.es.js";
11
+ import { SettingsPanel as $ } from "../SettingsPanel/SettingsPanel.es.js";
12
+ import { ColumnsSettingsWithContext as M } from "./ColumnsSettings.es.js";
13
+ import { SizeSlider as O } from "../SizeSlider/SizeSlider.es.js";
14
+ import { useGroupBySettings as W } from "../../containers/ProjectTreeTable/hooks/useGroupBySettings.es.js";
15
+ import { useSortBySettings as D } from "../../containers/ProjectTreeTable/hooks/useSortBySettings.es.js";
16
+ const F = E(_)`
17
17
  min-width: 120px;
18
- `, se = ({ defaultSelected: a, className: p, ...u }) => {
19
- const { togglePanel: r, isPanelOpen: m } = H();
18
+ `, ne = ({ defaultSelected: a, className: p, ...u }) => {
19
+ const { togglePanel: r, isPanelOpen: m } = V();
20
20
  return /* @__PURE__ */ n.jsx(
21
- W,
21
+ F,
22
22
  {
23
23
  onClick: () => r(a),
24
24
  icon: "settings",
@@ -27,7 +27,7 @@ const W = _(R)`
27
27
  children: "Customize"
28
28
  }
29
29
  );
30
- }, ne = ({
30
+ }, ae = ({
31
31
  settings: a = [],
32
32
  extraColumns: p = [],
33
33
  hiddenColumns: u = [],
@@ -38,20 +38,20 @@ const W = _(R)`
38
38
  order: y,
39
39
  scope: x
40
40
  }) => {
41
- const { ...b } = E(), { attribFields: S, scopes: o } = N(), {
41
+ const { ...b } = H(), { attribFields: S, scopes: o } = R(), {
42
42
  columnVisibility: T,
43
43
  defaultColumnVisibility: j,
44
44
  rowHeight: k = 34,
45
45
  updateRowHeight: w,
46
46
  updateRowHeightWithPersistence: B
47
- } = z(), f = [
47
+ } = N(), g = [
48
48
  {
49
49
  value: "thumbnail",
50
50
  label: t("thumbnail")
51
51
  },
52
52
  {
53
53
  value: "name",
54
- label: o.map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join("/") + " Name"
54
+ label: z(o)
55
55
  },
56
56
  {
57
57
  value: s.folder,
@@ -70,7 +70,7 @@ const W = _(R)`
70
70
  {
71
71
  value: "product",
72
72
  label: t("product"),
73
- hidden: ["product", "version"].some((e) => !o.includes(e))
73
+ hidden: !["product", "version"].some((e) => o.includes(e))
74
74
  },
75
75
  {
76
76
  value: "entityType",
@@ -113,32 +113,32 @@ const W = _(R)`
113
113
  ...b?.linkTypes && v ? b.linkTypes.filter((e) => [e.inputType, e.outputType].some((l) => o.includes(l))).flatMap((e) => [
114
114
  {
115
115
  value: h(e, "in"),
116
- label: g(e, "in")
116
+ label: f(e, "in")
117
117
  },
118
118
  {
119
119
  value: h(e, "out"),
120
- label: g(e, "out")
120
+ label: f(e, "out")
121
121
  }
122
122
  ]) : [],
123
123
  ...p
124
- ], d = f.filter(
124
+ ], d = g.filter(
125
125
  (e) => !e.hidden && !u.includes(e.value)
126
126
  ), P = d.filter(
127
- (e) => L(T, e.value, j)
128
- ).length, I = O({ scope: x }), A = U(f), i = [
127
+ (e) => A(T, e.value, j)
128
+ ).length, I = W({ scope: x }), L = D(g), i = [
129
129
  {
130
130
  id: "columns",
131
131
  title: "Columns",
132
132
  icon: "view_column",
133
133
  preview: `${P}/${d.length}`,
134
- component: /* @__PURE__ */ n.jsx($, { columns: d, highlighted: m })
134
+ component: /* @__PURE__ */ n.jsx(M, { columns: d, highlighted: m })
135
135
  },
136
- C ? null : A,
136
+ C ? null : L,
137
137
  I,
138
138
  {
139
139
  id: "row-height",
140
140
  component: /* @__PURE__ */ n.jsx(
141
- M,
141
+ O,
142
142
  {
143
143
  value: k,
144
144
  onChange: w,
@@ -153,10 +153,10 @@ const W = _(R)`
153
153
  if (r.includes(e.id)) return;
154
154
  const l = i.findIndex((c) => c && "id" in c && c.id === e.id);
155
155
  l !== -1 ? i[l] = e : i.push(e);
156
- }), /* @__PURE__ */ n.jsx(V, { settings: i, order: y });
156
+ }), /* @__PURE__ */ n.jsx($, { settings: i, order: y });
157
157
  };
158
158
  export {
159
- se as CustomizeButton,
160
- ne as ProjectTableSettings
159
+ ne as CustomizeButton,
160
+ ae as ProjectTableSettings
161
161
  };
162
162
  //# sourceMappingURL=ProjectTableSettings.es.js.map