@ynput/ayon-frontend-shared 0.2.31 → 0.2.32

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 (154) hide show
  1. package/dist/_virtual/index.cjs10.js +1 -1
  2. package/dist/_virtual/index.cjs5.js +1 -1
  3. package/dist/_virtual/index.cjs6.js +1 -1
  4. package/dist/_virtual/index.cjs8.js +1 -1
  5. package/dist/_virtual/index.cjs9.js +1 -1
  6. package/dist/_virtual/index.es10.js +5 -5
  7. package/dist/_virtual/index.es5.js +5 -2
  8. package/dist/_virtual/index.es5.js.map +1 -1
  9. package/dist/_virtual/index.es6.js +2 -5
  10. package/dist/_virtual/index.es6.js.map +1 -1
  11. package/dist/_virtual/index.es8.js +3 -3
  12. package/dist/_virtual/index.es9.js +5 -5
  13. package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +1 -1
  14. package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js.map +1 -1
  15. package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
  16. package/dist/node_modules/rehype/node_modules/vfile/lib/index.cjs.js +1 -1
  17. package/dist/node_modules/rehype/node_modules/vfile/lib/index.es.js +1 -1
  18. package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
  19. package/dist/node_modules/rehype-parse/lib/index.cjs.js.map +1 -1
  20. package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
  21. package/dist/node_modules/rehype-prism-plus/dist/index.es.cjs.js +1 -1
  22. package/dist/node_modules/rehype-prism-plus/dist/index.es.es.js +1 -1
  23. package/dist/node_modules/remove-accents/index.cjs.js +1 -1
  24. package/dist/node_modules/remove-accents/index.es.js +1 -1
  25. package/dist/shared/src/api/generated/access.cjs.js.map +1 -1
  26. package/dist/shared/src/api/generated/access.es.js.map +1 -1
  27. package/dist/shared/src/api/generated/authentication.cjs.js +1 -1
  28. package/dist/shared/src/api/generated/authentication.cjs.js.map +1 -1
  29. package/dist/shared/src/api/generated/authentication.es.js +9 -6
  30. package/dist/shared/src/api/generated/authentication.es.js.map +1 -1
  31. package/dist/shared/src/api/generated/entityLists.cjs.js.map +1 -1
  32. package/dist/shared/src/api/generated/entityLists.es.js.map +1 -1
  33. package/dist/shared/src/api/generated/folders.cjs.js.map +1 -1
  34. package/dist/shared/src/api/generated/folders.es.js.map +1 -1
  35. package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
  36. package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
  37. package/dist/shared/src/api/generated/graphqlLinks.cjs.js.map +1 -1
  38. package/dist/shared/src/api/generated/graphqlLinks.es.js.map +1 -1
  39. package/dist/shared/src/api/generated/links.cjs.js +1 -1
  40. package/dist/shared/src/api/generated/links.cjs.js.map +1 -1
  41. package/dist/shared/src/api/generated/links.es.js +13 -5
  42. package/dist/shared/src/api/generated/links.es.js.map +1 -1
  43. package/dist/shared/src/api/generated/onboarding.cjs.js.map +1 -1
  44. package/dist/shared/src/api/generated/onboarding.es.js.map +1 -1
  45. package/dist/shared/src/api/generated/operations.cjs.js +1 -1
  46. package/dist/shared/src/api/generated/operations.cjs.js.map +1 -1
  47. package/dist/shared/src/api/generated/operations.es.js +16 -0
  48. package/dist/shared/src/api/generated/operations.es.js.map +1 -1
  49. package/dist/shared/src/api/generated/products.cjs.js +1 -1
  50. package/dist/shared/src/api/generated/products.cjs.js.map +1 -1
  51. package/dist/shared/src/api/generated/products.es.js +6 -3
  52. package/dist/shared/src/api/generated/products.es.js.map +1 -1
  53. package/dist/shared/src/api/generated/projects.cjs.js +1 -1
  54. package/dist/shared/src/api/generated/projects.cjs.js.map +1 -1
  55. package/dist/shared/src/api/generated/projects.es.js +19 -0
  56. package/dist/shared/src/api/generated/projects.es.js.map +1 -1
  57. package/dist/shared/src/api/generated/system.cjs.js.map +1 -1
  58. package/dist/shared/src/api/generated/system.es.js.map +1 -1
  59. package/dist/shared/src/api/generated/tasks.cjs.js.map +1 -1
  60. package/dist/shared/src/api/generated/tasks.es.js.map +1 -1
  61. package/dist/shared/src/api/generated/users.cjs.js.map +1 -1
  62. package/dist/shared/src/api/generated/users.es.js.map +1 -1
  63. package/dist/shared/src/api/generated/versions.cjs.js.map +1 -1
  64. package/dist/shared/src/api/generated/versions.es.js.map +1 -1
  65. package/dist/shared/src/api/generated/views.cjs.js.map +1 -1
  66. package/dist/shared/src/api/generated/views.es.js.map +1 -1
  67. package/dist/shared/src/components/AttributeEditor/AttributeEditor.cjs.js +1 -1
  68. package/dist/shared/src/components/AttributeEditor/AttributeEditor.cjs.js.map +1 -1
  69. package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js +15 -10
  70. package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js.map +1 -1
  71. package/dist/shared/src/components/ProjectTableSettings/RowHeightSettings.cjs.js +60 -0
  72. package/dist/shared/src/components/ProjectTableSettings/RowHeightSettings.cjs.js.map +1 -0
  73. package/dist/shared/src/components/ProjectTableSettings/RowHeightSettings.es.js +332 -0
  74. package/dist/shared/src/components/ProjectTableSettings/RowHeightSettings.es.js.map +1 -0
  75. package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js +4 -4
  76. package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js.map +1 -1
  77. package/dist/shared/src/components/SettingsPanel/SettingsPanel.es.js +37 -33
  78. package/dist/shared/src/components/SettingsPanel/SettingsPanel.es.js.map +1 -1
  79. package/dist/shared/src/components/Thumbnail/Thumbnail.styled.cjs.js +3 -5
  80. package/dist/shared/src/components/Thumbnail/Thumbnail.styled.cjs.js.map +1 -1
  81. package/dist/shared/src/components/Thumbnail/Thumbnail.styled.es.js +4 -6
  82. package/dist/shared/src/components/Thumbnail/Thumbnail.styled.es.js.map +1 -1
  83. package/dist/shared/src/components/ThumbnailSimple/ThumbnailSimple.cjs.js +1 -2
  84. package/dist/shared/src/components/ThumbnailSimple/ThumbnailSimple.cjs.js.map +1 -1
  85. package/dist/shared/src/components/ThumbnailSimple/ThumbnailSimple.es.js +0 -1
  86. package/dist/shared/src/components/ThumbnailSimple/ThumbnailSimple.es.js.map +1 -1
  87. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +1 -1
  88. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
  89. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +555 -537
  90. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
  91. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.cjs.js +0 -1
  92. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.cjs.js.map +1 -1
  93. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.es.js +4 -5
  94. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.es.js.map +1 -1
  95. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +1 -1
  96. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  97. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +92 -91
  98. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  99. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.cjs.js.map +1 -1
  100. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.es.js.map +1 -1
  101. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.cjs.js +1 -1
  102. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.cjs.js.map +1 -1
  103. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.es.js +126 -108
  104. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsProvider.es.js.map +1 -1
  105. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDynamicRowHeight.cjs.js +2 -0
  106. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDynamicRowHeight.cjs.js.map +1 -0
  107. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDynamicRowHeight.es.js +9 -0
  108. package/dist/shared/src/containers/ProjectTreeTable/hooks/useDynamicRowHeight.es.js.map +1 -0
  109. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js +2 -2
  110. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js.map +1 -1
  111. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js +49 -48
  112. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js.map +1 -1
  113. package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.cjs.js +38 -9
  114. package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.cjs.js.map +1 -1
  115. package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.es.js +74 -39
  116. package/dist/shared/src/containers/ProjectTreeTable/widgets/EntityNameWidget.es.js.map +1 -1
  117. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.cjs.js +24 -15
  118. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.cjs.js.map +1 -1
  119. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.es.js +71 -59
  120. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.es.js.map +1 -1
  121. package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.cjs.js +6 -6
  122. package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.cjs.js.map +1 -1
  123. package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.es.js +12 -12
  124. package/dist/shared/src/containers/ProjectTreeTable/widgets/ThumbnailWidget.es.js.map +1 -1
  125. package/dist/shared/src/util/columnConfigConverter.cjs.js +1 -1
  126. package/dist/shared/src/util/columnConfigConverter.cjs.js.map +1 -1
  127. package/dist/shared/src/util/columnConfigConverter.es.js +35 -33
  128. package/dist/shared/src/util/columnConfigConverter.es.js.map +1 -1
  129. package/dist/types/api/generated/access.d.ts +6 -0
  130. package/dist/types/api/generated/authentication.d.ts +6 -0
  131. package/dist/types/api/generated/entityLists.d.ts +7 -7
  132. package/dist/types/api/generated/folders.d.ts +2 -2
  133. package/dist/types/api/generated/graphql.d.ts +3 -1
  134. package/dist/types/api/generated/graphqlLinks.d.ts +21 -15
  135. package/dist/types/api/generated/links.d.ts +4 -0
  136. package/dist/types/api/generated/onboarding.d.ts +3 -0
  137. package/dist/types/api/generated/operations.d.ts +22 -1
  138. package/dist/types/api/generated/products.d.ts +23 -0
  139. package/dist/types/api/generated/projects.d.ts +63 -0
  140. package/dist/types/api/generated/representations.d.ts +1 -0
  141. package/dist/types/api/generated/system.d.ts +9 -2
  142. package/dist/types/api/generated/tasks.d.ts +1 -0
  143. package/dist/types/api/generated/users.d.ts +1 -1
  144. package/dist/types/api/generated/versions.d.ts +1 -0
  145. package/dist/types/api/generated/views.d.ts +50 -9
  146. package/dist/types/api/queries/authentication/getAuthentication.d.ts +1 -0
  147. package/dist/types/api/queries/overview/updateOverview.d.ts +2 -0
  148. package/dist/types/api/queries/project/getProject.d.ts +4 -0
  149. package/dist/types/components/ProjectTableSettings/RowHeightSettings.d.ts +3 -0
  150. package/dist/types/containers/ProjectTreeTable/context/ColumnSettingsContext.d.ts +4 -0
  151. package/dist/types/containers/ProjectTreeTable/hooks/useDynamicRowHeight.d.ts +11 -0
  152. package/dist/types/containers/ProjectTreeTable/widgets/EntityNameWidget.d.ts +2 -1
  153. package/dist/types/containers/ProjectTreeTable/widgets/EnumCellValue.d.ts +2 -1
  154. package/package.json +3 -3
@@ -1,16 +1,17 @@
1
1
  import { j as n } from "../../../../../_virtual/jsx-runtime.es.js";
2
- import { useRef as H, useCallback as J, useMemo as K } from "react";
3
- import P from "styled-components";
4
- import { BooleanWidget as Q } from "./BooleanWidget.es.js";
5
- import { CollapsedWidget as U } from "./CollapsedWidget.es.js";
6
- import { DateWidget as X } from "./DateWidget.es.js";
7
- import { EnumWidget as Y } from "./EnumWidget.es.js";
8
- import { TextWidget as Z } from "./TextWidget.es.js";
9
- import { isLinkEditable as $, LinksWidget as D } from "./LinksWidget.es.js";
10
- import { useCellEditing as O } from "../context/CellEditingContext.es.js";
2
+ import { useRef as J, useCallback as K, useMemo as P } from "react";
3
+ import Q from "styled-components";
4
+ import { BooleanWidget as U } from "./BooleanWidget.es.js";
5
+ import { CollapsedWidget as X } from "./CollapsedWidget.es.js";
6
+ import { DateWidget as Y } from "./DateWidget.es.js";
7
+ import { EnumWidget as Z } from "./EnumWidget.es.js";
8
+ import { TextWidget as $ } from "./TextWidget.es.js";
9
+ import { isLinkEditable as D, LinksWidget as O } from "./LinksWidget.es.js";
10
+ import { useCellEditing as V } from "../context/CellEditingContext.es.js";
11
+ import { useColumnSettingsContext as tt } from "../context/ColumnSettingsContext.es.js";
11
12
  import { getCellId as h } from "../utils/cellUtils.es.js";
12
- import V from "clsx";
13
- import { useSelectionCellsContext as tt } from "../context/SelectionCellsContext.es.js";
13
+ import ot from "clsx";
14
+ import { useSelectionCellsContext as it } from "../context/SelectionCellsContext.es.js";
14
15
  import "react-toastify";
15
16
  import "lodash";
16
17
  import "uuid";
@@ -25,10 +26,9 @@ import "../components/SelectionCell.es.js";
25
26
  import "../components/RowSelectionHeader.es.js";
26
27
  import "./LoadMoreWidget.es.js";
27
28
  import "../context/ProjectTableQueriesContext.es.js";
28
- import { useProjectTableContext as ot } from "../context/ProjectTableContext.es.js";
29
+ import { useProjectTableContext as rt } from "../context/ProjectTableContext.es.js";
29
30
  import "../context/ClipboardContext.es.js";
30
31
  import "../ProjectTreeTable.es.js";
31
- import "../context/ColumnSettingsContext.es.js";
32
32
  import "../context/SelectedRowsContext.es.js";
33
33
  import "../context/DetailsPanelEntityContext.es.js";
34
34
  /* empty css */
@@ -130,9 +130,9 @@ import "../../../context/MenuContext.es.js";
130
130
  import "react-redux";
131
131
  import "custom-protocol-check";
132
132
  import "../components/GroupSettingsFallback.es.js";
133
- import { EnumCellValue as it } from "./EnumCellValue.es.js";
134
- import { NameWidget as rt } from "./NameWidget.es.js";
135
- const mt = P.div`
133
+ import { EnumCellValue as mt } from "./EnumCellValue.es.js";
134
+ import { NameWidget as et } from "./NameWidget.es.js";
135
+ const pt = Q.div`
136
136
  position: absolute;
137
137
  inset: 0;
138
138
  padding: 4px 8px;
@@ -153,12 +153,12 @@ const mt = P.div`
153
153
  border-radius: 4px;
154
154
  opacity: 1;
155
155
  }
156
- `, Li = "edit-trigger", Ri = ({
156
+ `, Fi = "edit-trigger", Gi = ({
157
157
  rowId: j,
158
- columnId: x,
158
+ columnId: g,
159
159
  value: i,
160
160
  valueData: T,
161
- attributeData: g,
161
+ attributeData: x,
162
162
  options: d = [],
163
163
  isCollapsed: b,
164
164
  isInherited: f,
@@ -171,26 +171,26 @@ const mt = P.div`
171
171
  pt: m,
172
172
  ...y
173
173
  }) => {
174
- const W = H(null), r = g == null ? void 0 : g.type, { projectName: M } = ot(), { isEditing: S, setEditingCellId: s } = O(), { isCellFocused: k, gridMap: w, selectCell: L, focusCell: R } = tt(), p = h(j, x), u = S(p), F = k(p), G = J(() => {
174
+ const w = J(null), r = x == null ? void 0 : x.type, { projectName: S } = rt(), { isEditing: M, setEditingCellId: s } = V(), { isCellFocused: k, gridMap: W, selectCell: L, focusCell: R } = it(), { rowHeight: F } = tt(), p = h(j, g), u = M(p), G = k(p), _ = K(() => {
175
175
  C || l || s(p);
176
- }, [p, s, C]), _ = () => {
176
+ }, [p, s, C]), B = () => {
177
177
  u || s(null);
178
- }, B = () => {
179
- const o = w.rowIdToIndex.get(j);
178
+ }, H = () => {
179
+ const o = W.rowIdToIndex.get(j);
180
180
  if (o === void 0) return;
181
- const e = w.indexToRowId.get(o + 1);
181
+ const e = W.indexToRowId.get(o + 1);
182
182
  if (e) {
183
- const t = h(e, x);
183
+ const t = h(e, g);
184
184
  L(t, !1, !1), R(t), s(t);
185
185
  }
186
186
  }, q = (o, e) => {
187
- s(null), !l && (e === "Enter" && B(), (o !== i || e === "Enter") && (E == null || E(o, e)));
187
+ s(null), !l && (e === "Enter" && H(), (o !== i || e === "Enter") && (E == null || E(o, e)));
188
188
  }, v = () => {
189
189
  var e;
190
190
  s(null);
191
- const o = (e = W.current) == null ? void 0 : e.closest("td");
191
+ const o = (e = w.current) == null ? void 0 : e.closest("td");
192
192
  o && o.focus();
193
- }, z = K(() => {
193
+ }, z = P(() => {
194
194
  const o = {
195
195
  onChange: q,
196
196
  onCancelEdit: v,
@@ -202,11 +202,11 @@ const mt = P.div`
202
202
  const t = r != null && r.includes("list") ? d.find(
203
203
  (a) => Array.isArray(i) ? i.includes(a.value) : i === a.value
204
204
  ) : void 0, c = t == null ? void 0 : t.color;
205
- return /* @__PURE__ */ n.jsx(U, { color: c });
205
+ return /* @__PURE__ */ n.jsx(X, { color: c });
206
206
  }
207
207
  case r === "name":
208
208
  return /* @__PURE__ */ n.jsx(
209
- rt,
209
+ et,
210
210
  {
211
211
  value: i,
212
212
  valueData: T,
@@ -216,17 +216,17 @@ const mt = P.div`
216
216
  }
217
217
  );
218
218
  case r === "links": {
219
- const t = T, c = $(
219
+ const t = T, c = D(
220
220
  (t == null ? void 0 : t.direction) || "out",
221
221
  (t == null ? void 0 : t.link.linkType) || "",
222
222
  (t == null ? void 0 : t.entityType) || ""
223
223
  );
224
224
  return l = !c, /* @__PURE__ */ n.jsx(
225
- D,
225
+ O,
226
226
  {
227
227
  value: t,
228
228
  cellId: p,
229
- projectName: M,
229
+ projectName: S,
230
230
  disabled: !c,
231
231
  folderId: A,
232
232
  ...o
@@ -238,17 +238,18 @@ const mt = P.div`
238
238
  if (l) {
239
239
  const c = d.filter((a) => t.includes(a.value));
240
240
  return /* @__PURE__ */ n.jsx(
241
- it,
241
+ mt,
242
242
  {
243
243
  selectedOptions: c,
244
244
  isReadOnly: !0,
245
245
  hasMultipleValues: t.length > 1,
246
- isMultiSelect: r == null ? void 0 : r.includes("list")
246
+ isMultiSelect: r == null ? void 0 : r.includes("list"),
247
+ rowHeight: F
247
248
  }
248
249
  );
249
250
  }
250
251
  return /* @__PURE__ */ n.jsx(
251
- Y,
252
+ Z,
252
253
  {
253
254
  value: t,
254
255
  options: d,
@@ -262,18 +263,18 @@ const mt = P.div`
262
263
  }
263
264
  case e.includes(r):
264
265
  return /* @__PURE__ */ n.jsx(
265
- Z,
266
+ $,
266
267
  {
267
268
  value: i,
268
269
  isInherited: f,
269
- columnId: x,
270
+ columnId: g,
270
271
  ...o,
271
272
  ...m == null ? void 0 : m.text
272
273
  }
273
274
  );
274
275
  case r === "datetime":
275
276
  return /* @__PURE__ */ n.jsx(
276
- X,
277
+ Y,
277
278
  {
278
279
  value: i || void 0,
279
280
  isInherited: f,
@@ -282,7 +283,7 @@ const mt = P.div`
282
283
  }
283
284
  );
284
285
  case r === "boolean":
285
- return /* @__PURE__ */ n.jsx(Q, { value: i, ...o, ...m == null ? void 0 : m.boolean });
286
+ return /* @__PURE__ */ n.jsx(U, { value: i, ...o, ...m == null ? void 0 : m.boolean });
286
287
  case C:
287
288
  return null;
288
289
  default:
@@ -290,26 +291,26 @@ const mt = P.div`
290
291
  }
291
292
  }, [p, i, r, u, d, b]);
292
293
  return /* @__PURE__ */ n.jsx(
293
- mt,
294
+ pt,
294
295
  {
295
296
  ...y,
296
- className: V(y.className, {
297
+ className: ot(y.className, {
297
298
  inherited: f && !u,
298
299
  readonly: l,
299
300
  editable: !l
300
301
  }),
301
- ref: W,
302
- onDoubleClick: G,
303
- onClick: _,
302
+ ref: w,
303
+ onDoubleClick: _,
304
+ onClick: B,
304
305
  id: p,
305
- "data-tooltip": f && !u && F ? "Inherited" : void 0,
306
+ "data-tooltip": f && !u && G ? "Inherited" : void 0,
306
307
  "data-tooltip-delay": 200,
307
308
  children: z
308
309
  }
309
310
  );
310
311
  };
311
312
  export {
312
- Ri as CellWidget,
313
- Li as EDIT_TRIGGER_CLASS
313
+ Gi as CellWidget,
314
+ Fi as EDIT_TRIGGER_CLASS
314
315
  };
315
316
  //# sourceMappingURL=CellWidget.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CellWidget.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/widgets/CellWidget.tsx"],"sourcesContent":["import { useMemo, useCallback, useRef, FC } from 'react'\nimport styled from 'styled-components'\n\n// Widgets\nimport { BooleanWidget, BooleanWidgetProps } from './BooleanWidget'\nimport { CollapsedWidget } from './CollapsedWidget'\nimport { DateWidget, DateWidgetProps } from './DateWidget'\nimport { EnumWidget, EnumWidgetProps } from './EnumWidget'\nimport { TextWidget, TextWidgetProps, TextWidgetType } from './TextWidget'\nimport { isLinkEditable, LinksWidget, LinkWidgetData } from './LinksWidget'\n\n// Contexts\nimport { useCellEditing } from '../context/CellEditingContext'\n\n// Utils\nimport { getCellId } from '../utils/cellUtils'\nimport clsx from 'clsx'\nimport { useSelectionCellsContext } from '../context/SelectionCellsContext'\nimport { AttributeData, AttributeEnumItem } from '../types'\nimport { useProjectTableContext } from '../context'\nimport { EnumCellValue } from './EnumCellValue'\nimport { NameWidget } from '@shared/containers/ProjectTreeTable/widgets/NameWidget'\nimport { NameWidgetData } from '@shared/components/RenameForm'\n\nconst Cell = styled.div`\n position: absolute;\n inset: 0;\n padding: 4px 8px;\n display: flex;\n align-items: center;\n\n &:focus-visible {\n outline: none;\n }\n\n &.inherited {\n opacity: 0.6;\n font-style: italic;\n }\n\n &.loading {\n inset: 4px;\n border-radius: 4px;\n opacity: 1;\n }\n`\n\n// use this class to trigger the editing mode on a single click\nexport const EDIT_TRIGGER_CLASS = 'edit-trigger'\n\ntype WidgetAttributeData = { type: AttributeData['type'] | 'links' | 'name' }\n\nexport type CellValue = string | number | boolean\nexport type CellValueData = Record<string, any>\n\ninterface EditorCellProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n rowId: string\n columnId: string\n value: CellValue | CellValue[]\n valueData?: CellValueData | CellValueData[] // extra data for the value\n attributeData?: WidgetAttributeData\n options?: AttributeEnumItem[]\n isCollapsed?: boolean\n isInherited?: boolean\n isPlaceholder?: boolean\n isFocused?: boolean\n isReadOnly?: boolean\n enableCustomValues?: boolean\n folderId?: string | null\n onChange?: (value: CellValue | CellValue[], key?: 'Enter' | 'Click' | 'Escape') => void\n // options passthrough props\n pt?: {\n enum?: Partial<EnumWidgetProps>\n text?: Partial<TextWidgetProps>\n date?: Partial<DateWidgetProps>\n boolean?: Partial<BooleanWidgetProps>\n }\n entityType?: string\n}\n\nexport interface WidgetBaseProps {\n isEditing?: boolean\n onChange: Required<EditorCellProps>['onChange']\n onCancelEdit?: () => void\n}\n\nexport const CellWidget: FC<EditorCellProps> = ({\n rowId,\n columnId,\n value,\n valueData,\n attributeData,\n options = [],\n isCollapsed,\n isInherited,\n isPlaceholder,\n isReadOnly,\n enableCustomValues,\n folderId,\n onChange,\n entityType,\n pt,\n ...props\n}) => {\n const ref = useRef<HTMLDivElement>(null)\n const type = attributeData?.type\n\n const { projectName } = useProjectTableContext()\n const { isEditing, setEditingCellId } = useCellEditing()\n const { isCellFocused, gridMap, selectCell, focusCell } = useSelectionCellsContext()\n const cellId = getCellId(rowId, columnId)\n\n const isCurrentCellEditing = isEditing(cellId)\n const isCurrentCellFocused = isCellFocused(cellId)\n\n const handleDoubleClick = useCallback(() => {\n if (isPlaceholder || isReadOnly) return\n setEditingCellId(cellId)\n }, [cellId, setEditingCellId, isPlaceholder])\n\n const handleSingleClick = () => {\n // clicking a cell that is not editing will close the editor on this cell\n // NOTE: the selection of a cell is handled in ProjectTreeTable.tsx line 1079\n if (!isCurrentCellEditing) {\n setEditingCellId(null)\n }\n }\n\n const moveToNextRow = () => {\n const rowIndex = gridMap.rowIdToIndex.get(rowId)\n if (rowIndex === undefined) return\n const newRowId = gridMap.indexToRowId.get(rowIndex + 1)\n if (newRowId) {\n const newCellId = getCellId(newRowId, columnId)\n selectCell(newCellId, false, false)\n focusCell(newCellId)\n setEditingCellId(newCellId)\n }\n }\n\n const handleOnChange: WidgetBaseProps['onChange'] = (newValue, key) => {\n setEditingCellId(null)\n if (isReadOnly) return\n // move to the next cell row\n key === 'Enter' && moveToNextRow()\n // make change if the value is different or if the key is 'Enter'\n if (newValue !== value || key === 'Enter') {\n onChange?.(newValue, key)\n }\n }\n\n const handleCancel = () => {\n setEditingCellId(null)\n // ensure the browser focus moves back to the parent <td>\n const td = ref.current?.closest('td') as HTMLElement | null\n if (td) td.focus()\n }\n\n const widget = useMemo(() => {\n // Common props shared across all widgets\n const sharedProps: WidgetBaseProps = {\n onChange: handleOnChange,\n onCancelEdit: handleCancel,\n isEditing: isCurrentCellEditing,\n }\n\n const textTypes: TextWidgetType[] = ['string', 'integer', 'float']\n\n // Determine widget type based on attribute type\n switch (true) {\n // this is showing the collapsed widget (dot)\n case isCollapsed: {\n // if enum, find the first selected option and get its color\n const firstSelectedOption = type?.includes('list')\n ? options.find((option) =>\n Array.isArray(value) ? value.includes(option.value) : value === option.value,\n )\n : undefined\n const color = firstSelectedOption?.color\n return <CollapsedWidget color={color} />\n }\n case type === 'name': {\n return (\n <NameWidget\n value={value as CellValue}\n valueData={valueData as NameWidgetData}\n cellId={cellId}\n entityType={entityType || ''}\n {...sharedProps}\n />\n )\n }\n\n case type === 'links': {\n const linksValue = valueData as LinkWidgetData | undefined\n\n const isEditable = isLinkEditable(\n linksValue?.direction || 'out',\n linksValue?.link.linkType || '',\n linksValue?.entityType || '',\n )\n\n // overwrite readonly state if the cell is currently being edited\n isReadOnly = !isEditable\n return (\n <LinksWidget\n value={linksValue}\n cellId={cellId}\n projectName={projectName}\n disabled={!isEditable}\n folderId={folderId}\n {...sharedProps}\n />\n )\n }\n\n case !!options.length: {\n const enumValue = Array.isArray(value) ? value : [value]\n if (isReadOnly) {\n const selectedOptions = options.filter((option) => enumValue.includes(option.value))\n return (\n <EnumCellValue\n selectedOptions={selectedOptions}\n isReadOnly\n hasMultipleValues={enumValue.length > 1}\n isMultiSelect={type?.includes('list')}\n />\n )\n }\n return (\n <EnumWidget\n value={enumValue}\n options={options}\n type={type}\n onOpen={() => setEditingCellId(cellId)}\n enableCustomValues={enableCustomValues}\n {...sharedProps}\n {...pt?.enum}\n />\n )\n }\n\n case textTypes.includes(type as TextWidgetType):\n return (\n <TextWidget\n value={value as string}\n isInherited={isInherited}\n columnId={columnId}\n {...sharedProps}\n {...pt?.text}\n />\n )\n\n case type === 'datetime':\n return (\n <DateWidget\n value={value ? (value as string) : undefined}\n isInherited={isInherited}\n {...sharedProps}\n {...pt?.date}\n />\n )\n\n case type === 'boolean':\n return <BooleanWidget value={value as boolean} {...sharedProps} {...pt?.boolean} />\n\n case isPlaceholder:\n return null\n\n default:\n // TODO: We should not allow editing unrecognized types\n // At this point, only list_of_strings without proper options is unrecognized\n // (tags if not tags are specified in anatomy) and in that case, validation\n // on the server fails with a string value. Unless we have a widget that\n // accepts a string value AND options at the same time we shouldn't show\n // any edit widget\n\n //console.log(`Unrecognized type \"${type}\" for cell ${cellId}.`)\n return null\n }\n }, [cellId, value, type, isCurrentCellEditing, options, isCollapsed])\n\n return (\n <Cell\n {...props}\n className={clsx(props.className, {\n inherited: isInherited && !isCurrentCellEditing,\n readonly: isReadOnly,\n editable: !isReadOnly,\n })}\n ref={ref}\n onDoubleClick={handleDoubleClick}\n onClick={handleSingleClick}\n id={cellId}\n data-tooltip={\n isInherited && !isCurrentCellEditing && isCurrentCellFocused ? 'Inherited' : undefined\n }\n data-tooltip-delay={200}\n >\n {widget}\n </Cell>\n )\n}\n"],"names":["Cell","styled","EDIT_TRIGGER_CLASS","CellWidget","rowId","columnId","value","valueData","attributeData","options","isCollapsed","isInherited","isPlaceholder","isReadOnly","enableCustomValues","folderId","onChange","entityType","pt","props","ref","useRef","type","projectName","useProjectTableContext","isEditing","setEditingCellId","useCellEditing","isCellFocused","gridMap","selectCell","focusCell","useSelectionCellsContext","cellId","getCellId","isCurrentCellEditing","isCurrentCellFocused","handleDoubleClick","useCallback","handleSingleClick","moveToNextRow","rowIndex","newRowId","newCellId","handleOnChange","newValue","key","handleCancel","td","_a","widget","useMemo","sharedProps","textTypes","firstSelectedOption","option","color","jsx","CollapsedWidget","NameWidget","linksValue","isEditable","isLinkEditable","LinksWidget","enumValue","selectedOptions","EnumCellValue","EnumWidget","TextWidget","DateWidget","BooleanWidget","clsx"],"mappings":"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"}
1
+ {"version":3,"file":"CellWidget.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/widgets/CellWidget.tsx"],"sourcesContent":["import { useMemo, useCallback, useRef, FC } from 'react'\nimport styled from 'styled-components'\n\n// Widgets\nimport { BooleanWidget, BooleanWidgetProps } from './BooleanWidget'\nimport { CollapsedWidget } from './CollapsedWidget'\nimport { DateWidget, DateWidgetProps } from './DateWidget'\nimport { EnumWidget, EnumWidgetProps } from './EnumWidget'\nimport { TextWidget, TextWidgetProps, TextWidgetType } from './TextWidget'\nimport { isLinkEditable, LinksWidget, LinkWidgetData } from './LinksWidget'\n\n// Contexts\nimport { useCellEditing } from '../context/CellEditingContext'\nimport { useColumnSettingsContext } from '../context/ColumnSettingsContext'\n\n// Utils\nimport { getCellId } from '../utils/cellUtils'\nimport clsx from 'clsx'\nimport { useSelectionCellsContext } from '../context/SelectionCellsContext'\nimport { AttributeData, AttributeEnumItem } from '../types'\nimport { useProjectTableContext } from '../context'\nimport { EnumCellValue } from './EnumCellValue'\nimport { NameWidget } from '@shared/containers/ProjectTreeTable/widgets/NameWidget'\nimport { NameWidgetData } from '@shared/components/RenameForm'\n\nconst Cell = styled.div`\n position: absolute;\n inset: 0;\n padding: 4px 8px;\n display: flex;\n align-items: center;\n\n &:focus-visible {\n outline: none;\n }\n\n &.inherited {\n opacity: 0.6;\n font-style: italic;\n }\n\n &.loading {\n inset: 4px;\n border-radius: 4px;\n opacity: 1;\n }\n`\n\n// use this class to trigger the editing mode on a single click\nexport const EDIT_TRIGGER_CLASS = 'edit-trigger'\n\ntype WidgetAttributeData = { type: AttributeData['type'] | 'links' | 'name' }\n\nexport type CellValue = string | number | boolean\nexport type CellValueData = Record<string, any>\n\ninterface EditorCellProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n rowId: string\n columnId: string\n value: CellValue | CellValue[]\n valueData?: CellValueData | CellValueData[] // extra data for the value\n attributeData?: WidgetAttributeData\n options?: AttributeEnumItem[]\n isCollapsed?: boolean\n isInherited?: boolean\n isPlaceholder?: boolean\n isFocused?: boolean\n isReadOnly?: boolean\n enableCustomValues?: boolean\n folderId?: string | null\n onChange?: (value: CellValue | CellValue[], key?: 'Enter' | 'Click' | 'Escape') => void\n // options passthrough props\n pt?: {\n enum?: Partial<EnumWidgetProps>\n text?: Partial<TextWidgetProps>\n date?: Partial<DateWidgetProps>\n boolean?: Partial<BooleanWidgetProps>\n }\n entityType?: string\n}\n\nexport interface WidgetBaseProps {\n isEditing?: boolean\n onChange: Required<EditorCellProps>['onChange']\n onCancelEdit?: () => void\n}\n\nexport const CellWidget: FC<EditorCellProps> = ({\n rowId,\n columnId,\n value,\n valueData,\n attributeData,\n options = [],\n isCollapsed,\n isInherited,\n isPlaceholder,\n isReadOnly,\n enableCustomValues,\n folderId,\n onChange,\n entityType,\n pt,\n ...props\n}) => {\n const ref = useRef<HTMLDivElement>(null)\n const type = attributeData?.type\n\n const { projectName } = useProjectTableContext()\n const { isEditing, setEditingCellId } = useCellEditing()\n const { isCellFocused, gridMap, selectCell, focusCell } = useSelectionCellsContext()\n const { rowHeight } = useColumnSettingsContext()\n const cellId = getCellId(rowId, columnId)\n\n const isCurrentCellEditing = isEditing(cellId)\n const isCurrentCellFocused = isCellFocused(cellId)\n\n const handleDoubleClick = useCallback(() => {\n if (isPlaceholder || isReadOnly) return\n setEditingCellId(cellId)\n }, [cellId, setEditingCellId, isPlaceholder])\n\n const handleSingleClick = () => {\n // clicking a cell that is not editing will close the editor on this cell\n // NOTE: the selection of a cell is handled in ProjectTreeTable.tsx line 1079\n if (!isCurrentCellEditing) {\n setEditingCellId(null)\n }\n }\n\n const moveToNextRow = () => {\n const rowIndex = gridMap.rowIdToIndex.get(rowId)\n if (rowIndex === undefined) return\n const newRowId = gridMap.indexToRowId.get(rowIndex + 1)\n if (newRowId) {\n const newCellId = getCellId(newRowId, columnId)\n selectCell(newCellId, false, false)\n focusCell(newCellId)\n setEditingCellId(newCellId)\n }\n }\n\n const handleOnChange: WidgetBaseProps['onChange'] = (newValue, key) => {\n setEditingCellId(null)\n if (isReadOnly) return\n // move to the next cell row\n key === 'Enter' && moveToNextRow()\n // make change if the value is different or if the key is 'Enter'\n if (newValue !== value || key === 'Enter') {\n onChange?.(newValue, key)\n }\n }\n\n const handleCancel = () => {\n setEditingCellId(null)\n // ensure the browser focus moves back to the parent <td>\n const td = ref.current?.closest('td') as HTMLElement | null\n if (td) td.focus()\n }\n\n const widget = useMemo(() => {\n // Common props shared across all widgets\n const sharedProps: WidgetBaseProps = {\n onChange: handleOnChange,\n onCancelEdit: handleCancel,\n isEditing: isCurrentCellEditing,\n }\n\n const textTypes: TextWidgetType[] = ['string', 'integer', 'float']\n\n // Determine widget type based on attribute type\n switch (true) {\n // this is showing the collapsed widget (dot)\n case isCollapsed: {\n // if enum, find the first selected option and get its color\n const firstSelectedOption = type?.includes('list')\n ? options.find((option) =>\n Array.isArray(value) ? value.includes(option.value) : value === option.value,\n )\n : undefined\n const color = firstSelectedOption?.color\n return <CollapsedWidget color={color} />\n }\n case type === 'name': {\n return (\n <NameWidget\n value={value as CellValue}\n valueData={valueData as NameWidgetData}\n cellId={cellId}\n entityType={entityType || ''}\n {...sharedProps}\n />\n )\n }\n\n case type === 'links': {\n const linksValue = valueData as LinkWidgetData | undefined\n\n const isEditable = isLinkEditable(\n linksValue?.direction || 'out',\n linksValue?.link.linkType || '',\n linksValue?.entityType || '',\n )\n\n // overwrite readonly state if the cell is currently being edited\n isReadOnly = !isEditable\n return (\n <LinksWidget\n value={linksValue}\n cellId={cellId}\n projectName={projectName}\n disabled={!isEditable}\n folderId={folderId}\n {...sharedProps}\n />\n )\n }\n\n case !!options.length: {\n const enumValue = Array.isArray(value) ? value : [value]\n if (isReadOnly) {\n const selectedOptions = options.filter((option) => enumValue.includes(option.value))\n return (\n <EnumCellValue\n selectedOptions={selectedOptions}\n isReadOnly\n hasMultipleValues={enumValue.length > 1}\n isMultiSelect={type?.includes('list')}\n rowHeight={rowHeight}\n />\n )\n }\n return (\n <EnumWidget\n value={enumValue}\n options={options}\n type={type}\n onOpen={() => setEditingCellId(cellId)}\n enableCustomValues={enableCustomValues}\n {...sharedProps}\n {...pt?.enum}\n />\n )\n }\n\n case textTypes.includes(type as TextWidgetType):\n return (\n <TextWidget\n value={value as string}\n isInherited={isInherited}\n columnId={columnId}\n {...sharedProps}\n {...pt?.text}\n />\n )\n\n case type === 'datetime':\n return (\n <DateWidget\n value={value ? (value as string) : undefined}\n isInherited={isInherited}\n {...sharedProps}\n {...pt?.date}\n />\n )\n\n case type === 'boolean':\n return <BooleanWidget value={value as boolean} {...sharedProps} {...pt?.boolean} />\n\n case isPlaceholder:\n return null\n\n default:\n // TODO: We should not allow editing unrecognized types\n // At this point, only list_of_strings without proper options is unrecognized\n // (tags if not tags are specified in anatomy) and in that case, validation\n // on the server fails with a string value. Unless we have a widget that\n // accepts a string value AND options at the same time we shouldn't show\n // any edit widget\n\n //console.log(`Unrecognized type \"${type}\" for cell ${cellId}.`)\n return null\n }\n }, [cellId, value, type, isCurrentCellEditing, options, isCollapsed])\n\n return (\n <Cell\n {...props}\n className={clsx(props.className, {\n inherited: isInherited && !isCurrentCellEditing,\n readonly: isReadOnly,\n editable: !isReadOnly,\n })}\n ref={ref}\n onDoubleClick={handleDoubleClick}\n onClick={handleSingleClick}\n id={cellId}\n data-tooltip={\n isInherited && !isCurrentCellEditing && isCurrentCellFocused ? 'Inherited' : undefined\n }\n data-tooltip-delay={200}\n >\n {widget}\n </Cell>\n )\n}\n"],"names":["Cell","styled","EDIT_TRIGGER_CLASS","CellWidget","rowId","columnId","value","valueData","attributeData","options","isCollapsed","isInherited","isPlaceholder","isReadOnly","enableCustomValues","folderId","onChange","entityType","pt","props","ref","useRef","type","projectName","useProjectTableContext","isEditing","setEditingCellId","useCellEditing","isCellFocused","gridMap","selectCell","focusCell","useSelectionCellsContext","rowHeight","useColumnSettingsContext","cellId","getCellId","isCurrentCellEditing","isCurrentCellFocused","handleDoubleClick","useCallback","handleSingleClick","moveToNextRow","rowIndex","newRowId","newCellId","handleOnChange","newValue","key","handleCancel","td","_a","widget","useMemo","sharedProps","textTypes","firstSelectedOption","option","color","jsx","CollapsedWidget","NameWidget","linksValue","isEditable","isLinkEditable","LinksWidget","enumValue","selectedOptions","EnumCellValue","EnumWidget","TextWidget","DateWidget","BooleanWidget","clsx"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../../../../_virtual/jsx-runtime.cjs.js"),o=require("@ynput/ayon-react-components"),t=require("styled-components"),m=t(o.Button)`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../../../../_virtual/jsx-runtime.cjs.js"),i=require("@ynput/ayon-react-components"),t=require("styled-components"),v=require("clsx"),f=t(i.Button)`
2
2
  &.expander {
3
3
  background-color: unset;
4
4
  padding: 2px;
@@ -8,7 +8,7 @@
8
8
  }
9
9
  }
10
10
  cursor: pointer;
11
- `,u=t.div`
11
+ `,y=t.div`
12
12
  position: relative;
13
13
  display: flex;
14
14
  align-items: center;
@@ -16,15 +16,15 @@
16
16
  height: 100%;
17
17
  width: 100%;
18
18
  padding-right: 8px;
19
- `,g=t.div`
19
+ `,j=t.div`
20
20
  width: 100%;
21
21
  height: 24px;
22
22
  overflow: hidden;
23
23
  position: relative;
24
- `,v=t.div`
24
+ `,b=t.div`
25
25
  position: absolute;
26
26
  inset: 0;
27
- `,y=t.div`
27
+ `,w=t.div`
28
28
  display: flex;
29
29
  align-items: center;
30
30
  gap: var(--base-gap-large);
@@ -43,21 +43,50 @@
43
43
  color: var(--md-sys-color-primary);
44
44
  }
45
45
  } */
46
- `,j=t.div`
46
+ `,E=t.div`
47
47
  display: flex;
48
48
  flex-direction: column;
49
+ align-items: flex-start;
49
50
  overflow: hidden;
51
+ flex: 1;
52
+ min-width: 0;
53
+
54
+ &.compact {
55
+ flex-direction: row;
56
+ align-items: center;
57
+ }
50
58
 
51
59
  .path {
52
- ${o.theme.labelSmall}
60
+ ${i.theme.bodyMedium}
61
+ font-size: 14px;
53
62
  margin-bottom: -4px;
54
63
  color: var(--md-sys-color-outline);
64
+ white-space: nowrap;
65
+ overflow: hidden;
66
+ text-overflow: ellipsis;
67
+ }
68
+
69
+ &.compact .path {
70
+ margin-bottom: 0;
71
+ text-overflow: unset;
72
+ flex-shrink: 0 1 auto;
55
73
  }
56
74
 
57
- span {
75
+ .label {
76
+ ${i.theme.bodyMedium}
77
+ font-size: 14px;
58
78
  overflow: hidden;
59
79
  white-space: nowrap;
60
80
  text-overflow: ellipsis;
81
+ flex: 1 1 auto;
82
+ min-width: 0;
83
+ }
84
+
85
+ .divider {
86
+ ${i.theme.bodyMedium}
87
+ font-size: 14px;
88
+ color: var(--md-sys-color-outline);
89
+ flex-shrink: 0;
61
90
  }
62
- `,b=({id:r,label:l,name:a,path:i,showHierarchy:d,icon:n,type:p,isExpanded:x,toggleExpandAll:c,toggleExpanded:h})=>e.jsxRuntimeExports.jsxs(u,{children:[d?p==="folder"?e.jsxRuntimeExports.jsx(m,{onClick:s=>{s.stopPropagation(),s.altKey?c(r):h()},className:"expander",icon:x?"expand_more":"chevron_right"}):e.jsxRuntimeExports.jsx("div",{style:{display:"inline-block",minWidth:24}}):null,e.jsxRuntimeExports.jsx(g,{style:{height:i?32:24},children:e.jsxRuntimeExports.jsx(v,{children:e.jsxRuntimeExports.jsxs(y,{children:[n&&e.jsxRuntimeExports.jsx(o.Icon,{icon:n}),e.jsxRuntimeExports.jsxs(j,{children:[i&&e.jsxRuntimeExports.jsx("span",{className:"path",children:i}),e.jsxRuntimeExports.jsx("span",{className:"label",children:l||a})]})]})})})]});exports.EntityNameWidget=b;
91
+ `,R=({id:a,label:d,name:c,path:o,showHierarchy:n,icon:r,type:x,isExpanded:p,toggleExpandAll:m,toggleExpanded:h,rowHeight:u=40})=>{const s=u<50,g=s||n?24:o?32:24;return e.jsxRuntimeExports.jsxs(y,{children:[n?x==="folder"?e.jsxRuntimeExports.jsx(f,{onClick:l=>{l.stopPropagation(),l.altKey?m(a):h()},className:"expander",icon:p?"expand_more":"chevron_right"}):e.jsxRuntimeExports.jsx("div",{style:{display:"inline-block",minWidth:24}}):null,e.jsxRuntimeExports.jsx(j,{style:{height:g},children:e.jsxRuntimeExports.jsx(b,{children:e.jsxRuntimeExports.jsxs(w,{children:[r&&e.jsxRuntimeExports.jsx(i.Icon,{icon:r}),e.jsxRuntimeExports.jsxs(E,{className:v({compact:s}),children:[o&&e.jsxRuntimeExports.jsx("span",{className:"path",children:o}),s&&o&&e.jsxRuntimeExports.jsx("span",{className:"divider",children:"/"}),e.jsxRuntimeExports.jsx("span",{className:"label",children:d||c})]})]})})})]})};exports.EntityNameWidget=R;
63
92
  //# sourceMappingURL=EntityNameWidget.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EntityNameWidget.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/widgets/EntityNameWidget.tsx"],"sourcesContent":["import { Button, Icon, theme } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\n\nconst Expander = styled(Button)`\n &.expander {\n background-color: unset;\n padding: 2px;\n\n &:hover {\n background-color: var(--md-sys-color-surface-container-high-hover);\n }\n }\n cursor: pointer;\n`\n\nconst StyledEntityNameWidget = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--base-gap-small);\n height: 100%;\n width: 100%;\n padding-right: 8px;\n`\n\nconst StyledContentWrapper = styled.div`\n width: 100%;\n height: 24px;\n overflow: hidden;\n position: relative;\n`\n\nconst StyledContentAbsolute = styled.div`\n position: absolute;\n inset: 0;\n`\n\nconst StyledContent = styled.div`\n display: flex;\n align-items: center;\n gap: var(--base-gap-large);\n padding: 2px 4px;\n border-radius: var(--border-radius-m);\n cursor: pointer;\n overflow: hidden;\n width: fit-content;\n max-width: 100%;\n height: 100%;\n\n /* &:hover {\n &,\n .icon,\n .path {\n color: var(--md-sys-color-primary);\n }\n } */\n`\n\nconst StyledTextContent = styled.div`\n display: flex;\n flex-direction: column;\n overflow: hidden;\n\n .path {\n ${theme.labelSmall}\n margin-bottom: -4px;\n color: var(--md-sys-color-outline);\n }\n\n span {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n`\n\ntype EntityNameWidgetProps = {\n id: string\n label: string\n name: string\n path?: string | null\n showHierarchy?: boolean\n icon?: string | null\n type: string\n isExpanded: boolean\n toggleExpandAll: (id: string) => void\n toggleExpanded: () => void\n}\n\nexport const EntityNameWidget = ({\n id,\n label,\n name,\n path,\n showHierarchy,\n icon,\n type,\n isExpanded,\n toggleExpandAll,\n toggleExpanded,\n}: EntityNameWidgetProps) => {\n return (\n <StyledEntityNameWidget>\n {showHierarchy ? (\n type === 'folder' ? (\n <Expander\n onClick={(e) => {\n e.stopPropagation()\n if (e.altKey) {\n // expand/collapse all children\n toggleExpandAll(id)\n } else {\n // use built-in toggleExpanded function\n toggleExpanded()\n }\n }}\n className=\"expander\"\n icon={isExpanded ? 'expand_more' : 'chevron_right'}\n />\n ) : (\n <div style={{ display: 'inline-block', minWidth: 24 }} />\n )\n ) : null}\n <StyledContentWrapper style={{ height: path ? 32 : 24 }}>\n <StyledContentAbsolute>\n <StyledContent>\n {icon && <Icon icon={icon} />}\n <StyledTextContent>\n {path && <span className=\"path\">{path}</span>}\n <span className=\"label\">{label || name}</span>\n </StyledTextContent>\n </StyledContent>\n </StyledContentAbsolute>\n </StyledContentWrapper>\n </StyledEntityNameWidget>\n )\n}\n"],"names":["Expander","styled","Button","StyledEntityNameWidget","StyledContentWrapper","StyledContentAbsolute","StyledContent","StyledTextContent","theme","EntityNameWidget","id","label","name","path","showHierarchy","icon","type","isExpanded","toggleExpandAll","toggleExpanded","jsx","e","jsxs","Icon"],"mappings":"uNAGMA,EAAWC,EAAOC,QAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYxBC,EAAyBF,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUhCG,EAAuBH,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAO9BI,EAAwBJ,EAAO;AAAA;AAAA;AAAA,EAK/BK,EAAgBL,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBvBM,EAAoBN,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM3BO,QAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBTC,EAAmB,CAAC,CAC/B,GAAAC,EACA,MAAAC,EACA,KAAAC,EACA,KAAAC,EACA,cAAAC,EACA,KAAAC,EACA,KAAAC,EACA,WAAAC,EACA,gBAAAC,EACA,eAAAC,CACF,6BAEKhB,EACE,CAAA,SAAA,CAAAW,EACCE,IAAS,SACPI,EAAA,kBAAA,IAACpB,EAAA,CACC,QAAUqB,GAAM,CACdA,EAAE,gBAAgB,EACdA,EAAE,OAEJH,EAAgBR,CAAE,EAGHS,EAAA,CAEnB,EACA,UAAU,WACV,KAAMF,EAAa,cAAgB,eAAA,CACrC,EAECG,wBAAA,MAAA,CAAI,MAAO,CAAE,QAAS,eAAgB,SAAU,GAAM,CAAA,EAEvD,KACHA,EAAA,kBAAA,IAAAhB,EAAA,CAAqB,MAAO,CAAE,OAAQS,EAAO,GAAK,EAAA,EACjD,SAAAO,EAAAA,kBAAAA,IAACf,EACC,CAAA,SAAAiB,EAAAA,kBAAAA,KAAChB,EACE,CAAA,SAAA,CAAQS,GAAAK,EAAA,kBAAA,IAACG,QAAK,KAAAR,CAAY,CAAA,2BAC1BR,EACE,CAAA,SAAA,CAAAM,GAASO,EAAA,kBAAA,IAAA,OAAA,CAAK,UAAU,OAAQ,SAAKP,EAAA,EACrCO,EAAA,kBAAA,IAAA,OAAA,CAAK,UAAU,QAAS,YAASR,CAAK,CAAA,CAAA,CACzC,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACF,CAAA,CAAA,EACF"}
1
+ {"version":3,"file":"EntityNameWidget.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/widgets/EntityNameWidget.tsx"],"sourcesContent":["import { Button, Icon, theme } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\nimport clsx from 'clsx'\n\nconst Expander = styled(Button)`\n &.expander {\n background-color: unset;\n padding: 2px;\n\n &:hover {\n background-color: var(--md-sys-color-surface-container-high-hover);\n }\n }\n cursor: pointer;\n`\n\nconst StyledEntityNameWidget = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--base-gap-small);\n height: 100%;\n width: 100%;\n padding-right: 8px;\n`\n\nconst StyledContentWrapper = styled.div`\n width: 100%;\n height: 24px;\n overflow: hidden;\n position: relative;\n`\n\nconst StyledContentAbsolute = styled.div`\n position: absolute;\n inset: 0;\n`\n\nconst StyledContent = styled.div`\n display: flex;\n align-items: center;\n gap: var(--base-gap-large);\n padding: 2px 4px;\n border-radius: var(--border-radius-m);\n cursor: pointer;\n overflow: hidden;\n width: fit-content;\n max-width: 100%;\n height: 100%;\n\n /* &:hover {\n &,\n .icon,\n .path {\n color: var(--md-sys-color-primary);\n }\n } */\n`\n\nconst StyledTextContent = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n overflow: hidden;\n flex: 1;\n min-width: 0;\n\n &.compact {\n flex-direction: row;\n align-items: center;\n }\n\n .path {\n ${theme.bodyMedium}\n font-size: 14px;\n margin-bottom: -4px;\n color: var(--md-sys-color-outline);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n &.compact .path {\n margin-bottom: 0;\n text-overflow: unset;\n flex-shrink: 0 1 auto;\n }\n\n .label {\n ${theme.bodyMedium}\n font-size: 14px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n flex: 1 1 auto;\n min-width: 0;\n }\n\n .divider {\n ${theme.bodyMedium}\n font-size: 14px;\n color: var(--md-sys-color-outline);\n flex-shrink: 0;\n }\n`\n\ntype EntityNameWidgetProps = {\n id: string\n label: string\n name: string\n path?: string | null\n showHierarchy?: boolean\n icon?: string | null\n type: string\n isExpanded: boolean\n toggleExpandAll: (id: string) => void\n toggleExpanded: () => void\n rowHeight?: number\n}\n\nexport const EntityNameWidget = ({\n id,\n label,\n name,\n path,\n showHierarchy,\n icon,\n type,\n isExpanded,\n toggleExpandAll,\n toggleExpanded,\n rowHeight = 40,\n}: EntityNameWidgetProps) => {\n // Determine layout based on row height\n // < 50px = single line (compact), >= 50px = stacked\n const isCompact = rowHeight < 50\n\n // Always keep content height at 24px in compact mode or hierarchy mode to prevent jumping\n // Only allow expansion to 32px in non-hierarchy mode when not compact and path exists\n const contentHeight = (isCompact || showHierarchy) ? 24 : (path ? 32 : 24)\n\n return (\n <StyledEntityNameWidget>\n {showHierarchy ? (\n type === 'folder' ? (\n <Expander\n onClick={(e) => {\n e.stopPropagation()\n if (e.altKey) {\n // expand/collapse all children\n toggleExpandAll(id)\n } else {\n // use built-in toggleExpanded function\n toggleExpanded()\n }\n }}\n className=\"expander\"\n icon={isExpanded ? 'expand_more' : 'chevron_right'}\n />\n ) : (\n <div style={{ display: 'inline-block', minWidth: 24 }} />\n )\n ) : null}\n <StyledContentWrapper style={{ height: contentHeight }}>\n <StyledContentAbsolute>\n <StyledContent>\n {icon && <Icon icon={icon} />}\n <StyledTextContent className={clsx({ compact: isCompact })}>\n {path && <span className=\"path\">{path}</span>}\n {isCompact && path && <span className=\"divider\">/</span>}\n <span className=\"label\">{label || name}</span>\n </StyledTextContent>\n </StyledContent>\n </StyledContentAbsolute>\n </StyledContentWrapper>\n </StyledEntityNameWidget>\n )\n}\n"],"names":["Expander","styled","Button","StyledEntityNameWidget","StyledContentWrapper","StyledContentAbsolute","StyledContent","StyledTextContent","theme","EntityNameWidget","id","label","name","path","showHierarchy","icon","type","isExpanded","toggleExpandAll","toggleExpanded","rowHeight","isCompact","contentHeight","jsx","e","jsxs","Icon","clsx"],"mappings":"yOAIMA,EAAWC,EAAOC,QAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYxBC,EAAyBF,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUhCG,EAAuBH,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAO9BI,EAAwBJ,EAAO;AAAA;AAAA;AAAA,EAK/BK,EAAgBL,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBvBM,EAAoBN,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAc3BO,QAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgBhBA,QAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUhBA,QAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBTC,EAAmB,CAAC,CAC/B,GAAAC,EACA,MAAAC,EACA,KAAAC,EACA,KAAAC,EACA,cAAAC,EACA,KAAAC,EACA,KAAAC,EACA,WAAAC,EACA,gBAAAC,EACA,eAAAC,EACA,UAAAC,EAAY,EACd,IAA6B,CAG3B,MAAMC,EAAYD,EAAY,GAIxBE,EAAiBD,GAAaP,EAAiB,GAAMD,EAAO,GAAK,GAEvE,gCACGV,EACE,CAAA,SAAA,CAAAW,EACCE,IAAS,SACPO,EAAA,kBAAA,IAACvB,EAAA,CACC,QAAUwB,GAAM,CACdA,EAAE,gBAAgB,EACdA,EAAE,OAEJN,EAAgBR,CAAE,EAGHS,EAAA,CAEnB,EACA,UAAU,WACV,KAAMF,EAAa,cAAgB,eAAA,CACrC,EAECM,wBAAA,MAAA,CAAI,MAAO,CAAE,QAAS,eAAgB,SAAU,GAAM,CAAA,EAEvD,KACJA,EAAA,kBAAA,IAACnB,EAAqB,CAAA,MAAO,CAAE,OAAQkB,GACrC,SAAAC,EAAAA,kBAAAA,IAAClB,EACC,CAAA,SAAAoB,EAAA,kBAAA,KAACnB,EACE,CAAA,SAAA,CAAQS,GAAAQ,EAAA,kBAAA,IAACG,QAAK,KAAAX,CAAY,CAAA,EAC3BU,yBAAClB,GAAkB,UAAWoB,EAAK,CAAE,QAASN,EAAW,EACtD,SAAA,CAAAR,GAASU,EAAA,kBAAA,IAAA,OAAA,CAAK,UAAU,OAAQ,SAAKV,EAAA,EACrCQ,GAAaR,GAAQU,EAAAA,kBAAAA,IAAC,OAAK,CAAA,UAAU,UAAU,SAAC,IAAA,EAChDA,EAAA,kBAAA,IAAA,OAAA,CAAK,UAAU,QAAS,YAASX,CAAK,CAAA,CAAA,CACzC,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACF,CAAA,CAAA,EACF,CAEJ"}
@@ -1,7 +1,8 @@
1
1
  import { j as e } from "../../../../../_virtual/jsx-runtime.es.js";
2
- import { Button as x, theme as m, Icon as g } from "@ynput/ayon-react-components";
2
+ import { Button as g, theme as n, Icon as u } from "@ynput/ayon-react-components";
3
3
  import o from "styled-components";
4
- const v = o(x)`
4
+ import y from "clsx";
5
+ const w = o(g)`
5
6
  &.expander {
6
7
  background-color: unset;
7
8
  padding: 2px;
@@ -11,7 +12,7 @@ const v = o(x)`
11
12
  }
12
13
  }
13
14
  cursor: pointer;
14
- `, y = o.div`
15
+ `, b = o.div`
15
16
  position: relative;
16
17
  display: flex;
17
18
  align-items: center;
@@ -19,15 +20,15 @@ const v = o(x)`
19
20
  height: 100%;
20
21
  width: 100%;
21
22
  padding-right: 8px;
22
- `, f = o.div`
23
+ `, j = o.div`
23
24
  width: 100%;
24
25
  height: 24px;
25
26
  overflow: hidden;
26
27
  position: relative;
27
- `, u = o.div`
28
+ `, N = o.div`
28
29
  position: absolute;
29
30
  inset: 0;
30
- `, b = o.div`
31
+ `, k = o.div`
31
32
  display: flex;
32
33
  align-items: center;
33
34
  gap: var(--base-gap-large);
@@ -46,53 +47,87 @@ const v = o(x)`
46
47
  color: var(--md-sys-color-primary);
47
48
  }
48
49
  } */
49
- `, j = o.div`
50
+ `, C = o.div`
50
51
  display: flex;
51
52
  flex-direction: column;
53
+ align-items: flex-start;
52
54
  overflow: hidden;
55
+ flex: 1;
56
+ min-width: 0;
57
+
58
+ &.compact {
59
+ flex-direction: row;
60
+ align-items: center;
61
+ }
53
62
 
54
63
  .path {
55
- ${m.labelSmall}
64
+ ${n.bodyMedium}
65
+ font-size: 14px;
56
66
  margin-bottom: -4px;
57
67
  color: var(--md-sys-color-outline);
68
+ white-space: nowrap;
69
+ overflow: hidden;
70
+ text-overflow: ellipsis;
71
+ }
72
+
73
+ &.compact .path {
74
+ margin-bottom: 0;
75
+ text-overflow: unset;
76
+ flex-shrink: 0 1 auto;
58
77
  }
59
78
 
60
- span {
79
+ .label {
80
+ ${n.bodyMedium}
81
+ font-size: 14px;
61
82
  overflow: hidden;
62
83
  white-space: nowrap;
63
84
  text-overflow: ellipsis;
85
+ flex: 1 1 auto;
86
+ min-width: 0;
87
+ }
88
+
89
+ .divider {
90
+ ${n.bodyMedium}
91
+ font-size: 14px;
92
+ color: var(--md-sys-color-outline);
93
+ flex-shrink: 0;
64
94
  }
65
- `, N = ({
66
- id: n,
67
- label: s,
68
- name: l,
95
+ `, M = ({
96
+ id: a,
97
+ label: d,
98
+ name: c,
69
99
  path: t,
70
- showHierarchy: a,
71
- icon: i,
72
- type: d,
73
- isExpanded: p,
74
- toggleExpandAll: c,
75
- toggleExpanded: h
76
- }) => /* @__PURE__ */ e.jsxs(y, { children: [
77
- a ? d === "folder" ? /* @__PURE__ */ e.jsx(
78
- v,
79
- {
80
- onClick: (r) => {
81
- r.stopPropagation(), r.altKey ? c(n) : h();
82
- },
83
- className: "expander",
84
- icon: p ? "expand_more" : "chevron_right"
85
- }
86
- ) : /* @__PURE__ */ e.jsx("div", { style: { display: "inline-block", minWidth: 24 } }) : null,
87
- /* @__PURE__ */ e.jsx(f, { style: { height: t ? 32 : 24 }, children: /* @__PURE__ */ e.jsx(u, { children: /* @__PURE__ */ e.jsxs(b, { children: [
88
- i && /* @__PURE__ */ e.jsx(g, { icon: i }),
89
- /* @__PURE__ */ e.jsxs(j, { children: [
90
- t && /* @__PURE__ */ e.jsx("span", { className: "path", children: t }),
91
- /* @__PURE__ */ e.jsx("span", { className: "label", children: s || l })
92
- ] })
93
- ] }) }) })
94
- ] });
100
+ showHierarchy: r,
101
+ icon: s,
102
+ type: p,
103
+ isExpanded: m,
104
+ toggleExpandAll: x,
105
+ toggleExpanded: h,
106
+ rowHeight: f = 40
107
+ }) => {
108
+ const i = f < 50, v = i || r ? 24 : t ? 32 : 24;
109
+ return /* @__PURE__ */ e.jsxs(b, { children: [
110
+ r ? p === "folder" ? /* @__PURE__ */ e.jsx(
111
+ w,
112
+ {
113
+ onClick: (l) => {
114
+ l.stopPropagation(), l.altKey ? x(a) : h();
115
+ },
116
+ className: "expander",
117
+ icon: m ? "expand_more" : "chevron_right"
118
+ }
119
+ ) : /* @__PURE__ */ e.jsx("div", { style: { display: "inline-block", minWidth: 24 } }) : null,
120
+ /* @__PURE__ */ e.jsx(j, { style: { height: v }, children: /* @__PURE__ */ e.jsx(N, { children: /* @__PURE__ */ e.jsxs(k, { children: [
121
+ s && /* @__PURE__ */ e.jsx(u, { icon: s }),
122
+ /* @__PURE__ */ e.jsxs(C, { className: y({ compact: i }), children: [
123
+ t && /* @__PURE__ */ e.jsx("span", { className: "path", children: t }),
124
+ i && t && /* @__PURE__ */ e.jsx("span", { className: "divider", children: "/" }),
125
+ /* @__PURE__ */ e.jsx("span", { className: "label", children: d || c })
126
+ ] })
127
+ ] }) }) })
128
+ ] });
129
+ };
95
130
  export {
96
- N as EntityNameWidget
131
+ M as EntityNameWidget
97
132
  };
98
133
  //# sourceMappingURL=EntityNameWidget.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EntityNameWidget.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/widgets/EntityNameWidget.tsx"],"sourcesContent":["import { Button, Icon, theme } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\n\nconst Expander = styled(Button)`\n &.expander {\n background-color: unset;\n padding: 2px;\n\n &:hover {\n background-color: var(--md-sys-color-surface-container-high-hover);\n }\n }\n cursor: pointer;\n`\n\nconst StyledEntityNameWidget = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--base-gap-small);\n height: 100%;\n width: 100%;\n padding-right: 8px;\n`\n\nconst StyledContentWrapper = styled.div`\n width: 100%;\n height: 24px;\n overflow: hidden;\n position: relative;\n`\n\nconst StyledContentAbsolute = styled.div`\n position: absolute;\n inset: 0;\n`\n\nconst StyledContent = styled.div`\n display: flex;\n align-items: center;\n gap: var(--base-gap-large);\n padding: 2px 4px;\n border-radius: var(--border-radius-m);\n cursor: pointer;\n overflow: hidden;\n width: fit-content;\n max-width: 100%;\n height: 100%;\n\n /* &:hover {\n &,\n .icon,\n .path {\n color: var(--md-sys-color-primary);\n }\n } */\n`\n\nconst StyledTextContent = styled.div`\n display: flex;\n flex-direction: column;\n overflow: hidden;\n\n .path {\n ${theme.labelSmall}\n margin-bottom: -4px;\n color: var(--md-sys-color-outline);\n }\n\n span {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n`\n\ntype EntityNameWidgetProps = {\n id: string\n label: string\n name: string\n path?: string | null\n showHierarchy?: boolean\n icon?: string | null\n type: string\n isExpanded: boolean\n toggleExpandAll: (id: string) => void\n toggleExpanded: () => void\n}\n\nexport const EntityNameWidget = ({\n id,\n label,\n name,\n path,\n showHierarchy,\n icon,\n type,\n isExpanded,\n toggleExpandAll,\n toggleExpanded,\n}: EntityNameWidgetProps) => {\n return (\n <StyledEntityNameWidget>\n {showHierarchy ? (\n type === 'folder' ? (\n <Expander\n onClick={(e) => {\n e.stopPropagation()\n if (e.altKey) {\n // expand/collapse all children\n toggleExpandAll(id)\n } else {\n // use built-in toggleExpanded function\n toggleExpanded()\n }\n }}\n className=\"expander\"\n icon={isExpanded ? 'expand_more' : 'chevron_right'}\n />\n ) : (\n <div style={{ display: 'inline-block', minWidth: 24 }} />\n )\n ) : null}\n <StyledContentWrapper style={{ height: path ? 32 : 24 }}>\n <StyledContentAbsolute>\n <StyledContent>\n {icon && <Icon icon={icon} />}\n <StyledTextContent>\n {path && <span className=\"path\">{path}</span>}\n <span className=\"label\">{label || name}</span>\n </StyledTextContent>\n </StyledContent>\n </StyledContentAbsolute>\n </StyledContentWrapper>\n </StyledEntityNameWidget>\n )\n}\n"],"names":["Expander","styled","Button","StyledEntityNameWidget","StyledContentWrapper","StyledContentAbsolute","StyledContent","StyledTextContent","theme","EntityNameWidget","id","label","name","path","showHierarchy","icon","type","isExpanded","toggleExpandAll","toggleExpanded","jsx","e","jsxs","Icon"],"mappings":";;;AAGA,MAAMA,IAAWC,EAAOC,CAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAYxBC,IAAyBF,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAUhCG,IAAuBH,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,GAO9BI,IAAwBJ,EAAO;AAAA;AAAA;AAAA,GAK/BK,IAAgBL,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqBvBM,IAAoBN,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM3BO,EAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAyBTC,IAAmB,CAAC;AAAA,EAC/B,IAAAC;AAAA,EACA,OAAAC;AAAA,EACA,MAAAC;AAAA,EACA,MAAAC;AAAA,EACA,eAAAC;AAAA,EACA,MAAAC;AAAA,EACA,MAAAC;AAAA,EACA,YAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,gBAAAC;AACF,6BAEKhB,GACE,EAAA,UAAA;AAAA,EAAAW,IACCE,MAAS,WACPI,gBAAAA,EAAA;AAAA,IAACpB;AAAA,IAAA;AAAA,MACC,SAAS,CAACqB,MAAM;AACd,QAAAA,EAAE,gBAAgB,GACdA,EAAE,SAEJH,EAAgBR,CAAE,IAGHS,EAAA;AAAA,MAEnB;AAAA,MACA,WAAU;AAAA,MACV,MAAMF,IAAa,gBAAgB;AAAA,IAAA;AAAA,EACrC,IAECG,gBAAAA,MAAA,OAAA,EAAI,OAAO,EAAE,SAAS,gBAAgB,UAAU,KAAM,CAAA,IAEvD;AAAA,EACHA,gBAAAA,EAAA,IAAAhB,GAAA,EAAqB,OAAO,EAAE,QAAQS,IAAO,KAAK,GAAA,GACjD,UAAAO,gBAAAA,EAAAA,IAACf,GACC,EAAA,UAAAiB,gBAAAA,EAAAA,KAAChB,GACE,EAAA,UAAA;AAAA,IAAQS,KAAAK,gBAAAA,EAAA,IAACG,KAAK,MAAAR,EAAY,CAAA;AAAA,2BAC1BR,GACE,EAAA,UAAA;AAAA,MAAAM,KAASO,gBAAAA,EAAA,IAAA,QAAA,EAAK,WAAU,QAAQ,UAAKP,GAAA;AAAA,MACrCO,gBAAAA,EAAA,IAAA,QAAA,EAAK,WAAU,SAAS,eAASR,EAAK,CAAA;AAAA,IAAA,EACzC,CAAA;AAAA,EAAA,EACF,CAAA,EACF,CAAA,EACF,CAAA;AAAA,GACF;"}
1
+ {"version":3,"file":"EntityNameWidget.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/widgets/EntityNameWidget.tsx"],"sourcesContent":["import { Button, Icon, theme } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\nimport clsx from 'clsx'\n\nconst Expander = styled(Button)`\n &.expander {\n background-color: unset;\n padding: 2px;\n\n &:hover {\n background-color: var(--md-sys-color-surface-container-high-hover);\n }\n }\n cursor: pointer;\n`\n\nconst StyledEntityNameWidget = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--base-gap-small);\n height: 100%;\n width: 100%;\n padding-right: 8px;\n`\n\nconst StyledContentWrapper = styled.div`\n width: 100%;\n height: 24px;\n overflow: hidden;\n position: relative;\n`\n\nconst StyledContentAbsolute = styled.div`\n position: absolute;\n inset: 0;\n`\n\nconst StyledContent = styled.div`\n display: flex;\n align-items: center;\n gap: var(--base-gap-large);\n padding: 2px 4px;\n border-radius: var(--border-radius-m);\n cursor: pointer;\n overflow: hidden;\n width: fit-content;\n max-width: 100%;\n height: 100%;\n\n /* &:hover {\n &,\n .icon,\n .path {\n color: var(--md-sys-color-primary);\n }\n } */\n`\n\nconst StyledTextContent = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n overflow: hidden;\n flex: 1;\n min-width: 0;\n\n &.compact {\n flex-direction: row;\n align-items: center;\n }\n\n .path {\n ${theme.bodyMedium}\n font-size: 14px;\n margin-bottom: -4px;\n color: var(--md-sys-color-outline);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n &.compact .path {\n margin-bottom: 0;\n text-overflow: unset;\n flex-shrink: 0 1 auto;\n }\n\n .label {\n ${theme.bodyMedium}\n font-size: 14px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n flex: 1 1 auto;\n min-width: 0;\n }\n\n .divider {\n ${theme.bodyMedium}\n font-size: 14px;\n color: var(--md-sys-color-outline);\n flex-shrink: 0;\n }\n`\n\ntype EntityNameWidgetProps = {\n id: string\n label: string\n name: string\n path?: string | null\n showHierarchy?: boolean\n icon?: string | null\n type: string\n isExpanded: boolean\n toggleExpandAll: (id: string) => void\n toggleExpanded: () => void\n rowHeight?: number\n}\n\nexport const EntityNameWidget = ({\n id,\n label,\n name,\n path,\n showHierarchy,\n icon,\n type,\n isExpanded,\n toggleExpandAll,\n toggleExpanded,\n rowHeight = 40,\n}: EntityNameWidgetProps) => {\n // Determine layout based on row height\n // < 50px = single line (compact), >= 50px = stacked\n const isCompact = rowHeight < 50\n\n // Always keep content height at 24px in compact mode or hierarchy mode to prevent jumping\n // Only allow expansion to 32px in non-hierarchy mode when not compact and path exists\n const contentHeight = (isCompact || showHierarchy) ? 24 : (path ? 32 : 24)\n\n return (\n <StyledEntityNameWidget>\n {showHierarchy ? (\n type === 'folder' ? (\n <Expander\n onClick={(e) => {\n e.stopPropagation()\n if (e.altKey) {\n // expand/collapse all children\n toggleExpandAll(id)\n } else {\n // use built-in toggleExpanded function\n toggleExpanded()\n }\n }}\n className=\"expander\"\n icon={isExpanded ? 'expand_more' : 'chevron_right'}\n />\n ) : (\n <div style={{ display: 'inline-block', minWidth: 24 }} />\n )\n ) : null}\n <StyledContentWrapper style={{ height: contentHeight }}>\n <StyledContentAbsolute>\n <StyledContent>\n {icon && <Icon icon={icon} />}\n <StyledTextContent className={clsx({ compact: isCompact })}>\n {path && <span className=\"path\">{path}</span>}\n {isCompact && path && <span className=\"divider\">/</span>}\n <span className=\"label\">{label || name}</span>\n </StyledTextContent>\n </StyledContent>\n </StyledContentAbsolute>\n </StyledContentWrapper>\n </StyledEntityNameWidget>\n )\n}\n"],"names":["Expander","styled","Button","StyledEntityNameWidget","StyledContentWrapper","StyledContentAbsolute","StyledContent","StyledTextContent","theme","EntityNameWidget","id","label","name","path","showHierarchy","icon","type","isExpanded","toggleExpandAll","toggleExpanded","rowHeight","isCompact","contentHeight","jsx","e","jsxs","Icon","clsx"],"mappings":";;;;AAIA,MAAMA,IAAWC,EAAOC,CAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAYxBC,IAAyBF,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAUhCG,IAAuBH,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,GAO9BI,IAAwBJ,EAAO;AAAA;AAAA;AAAA,GAK/BK,IAAgBL,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqBvBM,IAAoBN,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAc3BO,EAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgBhBA,EAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUhBA,EAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,GAqBTC,IAAmB,CAAC;AAAA,EAC/B,IAAAC;AAAA,EACA,OAAAC;AAAA,EACA,MAAAC;AAAA,EACA,MAAAC;AAAA,EACA,eAAAC;AAAA,EACA,MAAAC;AAAA,EACA,MAAAC;AAAA,EACA,YAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,WAAAC,IAAY;AACd,MAA6B;AAG3B,QAAMC,IAAYD,IAAY,IAIxBE,IAAiBD,KAAaP,IAAiB,KAAMD,IAAO,KAAK;AAEvE,gCACGV,GACE,EAAA,UAAA;AAAA,IAAAW,IACCE,MAAS,WACPO,gBAAAA,EAAA;AAAA,MAACvB;AAAA,MAAA;AAAA,QACC,SAAS,CAACwB,MAAM;AACd,UAAAA,EAAE,gBAAgB,GACdA,EAAE,SAEJN,EAAgBR,CAAE,IAGHS,EAAA;AAAA,QAEnB;AAAA,QACA,WAAU;AAAA,QACV,MAAMF,IAAa,gBAAgB;AAAA,MAAA;AAAA,IACrC,IAECM,gBAAAA,MAAA,OAAA,EAAI,OAAO,EAAE,SAAS,gBAAgB,UAAU,KAAM,CAAA,IAEvD;AAAA,IACJA,gBAAAA,EAAA,IAACnB,GAAqB,EAAA,OAAO,EAAE,QAAQkB,KACrC,UAAAC,gBAAAA,EAAAA,IAAClB,GACC,EAAA,UAAAoB,gBAAAA,EAAA,KAACnB,GACE,EAAA,UAAA;AAAA,MAAQS,KAAAQ,gBAAAA,EAAA,IAACG,KAAK,MAAAX,EAAY,CAAA;AAAA,MAC3BU,gBAAAA,OAAClB,KAAkB,WAAWoB,EAAK,EAAE,SAASN,GAAW,GACtD,UAAA;AAAA,QAAAR,KAASU,gBAAAA,EAAA,IAAA,QAAA,EAAK,WAAU,QAAQ,UAAKV,GAAA;AAAA,QACrCQ,KAAaR,KAAQU,gBAAAA,EAAAA,IAAC,QAAK,EAAA,WAAU,WAAU,UAAC,KAAA;AAAA,QAChDA,gBAAAA,EAAA,IAAA,QAAA,EAAK,WAAU,SAAS,eAASX,EAAK,CAAA;AAAA,MAAA,EACzC,CAAA;AAAA,IAAA,EACF,CAAA,EACF,CAAA,EACF,CAAA;AAAA,EAAA,GACF;AAEJ;"}