@ynput/ayon-frontend-shared 0.7.6 → 0.8.0

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 (70) hide show
  1. package/dist/DetailsPanel.es.js +361 -355
  2. package/dist/Feed.es.js +1 -1
  3. package/dist/ListTable.es.js +18 -18
  4. package/dist/NewEntity.es.js +30 -30
  5. package/dist/ProjectTreeTable.es.js +984 -974
  6. package/dist/ProjectsTable.es.js +3 -3
  7. package/dist/Slicer.es.js +53 -50
  8. package/dist/Views.es.js +150 -151
  9. package/dist/api.es.js +166 -165
  10. package/dist/chunks/Actions.es.js +9 -10
  11. package/dist/chunks/ColumnDropIndicator.es.js +2 -2
  12. package/dist/chunks/ColumnHeaderMenuUI.es.js +3 -4
  13. package/dist/chunks/DeleteEntitiesConfirmDialog.es.js +2 -2
  14. package/dist/chunks/DetailsDialog.es.js +3 -3
  15. package/dist/chunks/EmptyPlaceholder.es.js +7 -7
  16. package/dist/chunks/EntityPath.es.js +38 -39
  17. package/dist/chunks/EntityPickerDialog.es.js +65 -66
  18. package/dist/chunks/EntityTooltip.es.js +18 -19
  19. package/dist/chunks/Feed.es.js +1381 -1355
  20. package/dist/chunks/FilmstripEntityCard.es.js +5201 -0
  21. package/dist/chunks/FilterErrorActions.es.js +2 -3
  22. package/dist/chunks/GroupSettingsFallback.es.js +2 -2
  23. package/dist/chunks/Menu.es.js +52 -53
  24. package/dist/chunks/MetaWidget.es.js +1948 -1875
  25. package/dist/chunks/ProjectFoldersContext.es.js +40 -40
  26. package/dist/chunks/RepresentationsList.es.js +1 -1
  27. package/dist/chunks/ReviewablesSelector.es.js +759 -742
  28. package/dist/chunks/SimpleTable.es.js +2 -1
  29. package/dist/chunks/Slicer.es.js +49 -50
  30. package/dist/chunks/TableExportContextInstance.es.js +600 -402
  31. package/dist/chunks/TableSettingsFallback.es.js +3 -4
  32. package/dist/chunks/ThumbnailSimple.es.js +114 -99
  33. package/dist/chunks/VideoPlayer.es.js +8 -9
  34. package/dist/chunks/Watchers.es.js +928 -871
  35. package/dist/chunks/expandRelativeDates.es.js +1 -1
  36. package/dist/chunks/getThumbnailUrl.es.js +33 -21
  37. package/dist/chunks/getUris.es.js +1580 -1610
  38. package/dist/chunks/queryFilterToClientFilter.es.js +1 -1
  39. package/dist/chunks/realtimeUpdatesUtils.es.js +15 -15
  40. package/dist/chunks/searchTerms.es.js +773 -696
  41. package/dist/chunks/useAttributeEnums.es.js +22 -22
  42. package/dist/chunks/useDateRangeFilter.es.js +1 -1
  43. package/dist/chunks/useHierarchySelection.es.js +3 -4
  44. package/dist/chunks/useLoadModule.es.js +3 -4
  45. package/dist/components.es.js +475 -467
  46. package/dist/context.es.js +615 -540
  47. package/dist/hooks.es.js +193 -171
  48. package/dist/index.es.js +2 -2
  49. package/dist/types/Actions.d.ts +10 -8
  50. package/dist/types/DetailsPanel.d.ts +54 -76
  51. package/dist/types/EntityPickerDialog.d.ts +12 -6
  52. package/dist/types/Feed.d.ts +24 -24
  53. package/dist/types/ListTable.d.ts +33 -27
  54. package/dist/types/NewEntity.d.ts +26 -39
  55. package/dist/types/ProjectTreeTable.d.ts +199 -195
  56. package/dist/types/ProjectsTable.d.ts +6 -6
  57. package/dist/types/RepresentationsList.d.ts +4 -0
  58. package/dist/types/Slicer.d.ts +63 -246
  59. package/dist/types/Views.d.ts +71 -298
  60. package/dist/types/api.d.ts +3164 -2363
  61. package/dist/types/components.d.ts +327 -474
  62. package/dist/types/context.d.ts +285 -572
  63. package/dist/types/hooks.d.ts +76 -47
  64. package/dist/types/index.d.ts +6 -0
  65. package/dist/types/util.d.ts +141 -120
  66. package/dist/util.es.js +71 -68
  67. package/package.json +6 -6
  68. package/dist/chunks/EntityUpdatesContext.es.js +0 -61
  69. package/dist/chunks/PlayableIcon.es.js +0 -5020
  70. package/dist/chunks/viewUpdateHelper.es.js +0 -153
@@ -24,6 +24,7 @@ import { DropdownRef } from '@ynput/ayon-react-components';
24
24
  import { EditorConfig } from 'lexical';
25
25
  import { ElementFormatType } from 'lexical';
26
26
  import { ElementNode } from 'lexical';
27
+ import { EntityCardProps } from '@ynput/ayon-react-components';
27
28
  import { ExecutionProps } from 'styled-components';
28
29
  import { FastOmit } from 'styled-components';
29
30
  import { FC } from 'react';
@@ -289,7 +290,9 @@ declare type Anatomy = {
289
290
  /** Path templates configuration */
290
291
  templates?: Templates;
291
292
  /** Attributes configuration */
292
- attributes?: ProjectAttribModel;
293
+ attributes?: {
294
+ [key: string]: any;
295
+ };
293
296
  /** Folder types configuration */
294
297
  folder_types?: FolderType[];
295
298
  /** Task types configuration */
@@ -339,36 +342,40 @@ declare type AttributeData_2 = {
339
342
  /** Type of attribute value */
340
343
  type?: 'string' | 'integer' | 'float' | 'boolean' | 'datetime' | 'list_of_strings' | 'list_of_integers' | 'list_of_any' | 'list_of_submodels' | 'dict';
341
344
  /** Nice, human readable title of the attribute */
342
- title?: string;
343
- description?: string;
345
+ title?: string | null;
346
+ description?: string | null;
344
347
  /** Example value of the field. */
345
348
  example?: any;
346
349
  /** Default value for the attribute. Do not set for list types. */
347
350
  default?: any;
348
- gt?: number | number;
349
- ge?: number | number;
350
- lt?: number | number;
351
- le?: number | number;
352
- minLength?: number;
353
- maxLength?: number;
351
+ gt?: number | number | null;
352
+ ge?: number | number | null;
353
+ lt?: number | number | null;
354
+ le?: number | number | null;
355
+ minLength?: number | null;
356
+ maxLength?: number | null;
354
357
  /** Minimum number of items in list type. */
355
- minItems?: number;
358
+ minItems?: number | null;
356
359
  /** Only for list types. Maximum number of items in the list. */
357
- maxItems?: number;
360
+ maxItems?: number | null;
358
361
  /** Only for string types. The value must match this regex. */
359
- regex?: string;
362
+ regex?: string | null;
360
363
  /** List of enum items used for displaying select widgets */
361
- enum?: EnumItem[];
364
+ enum?: EnumItem[] | null;
362
365
  /** Name of the function that provides enum values dynamically. */
363
- enumResolver?: string;
366
+ enumResolver?: string | null;
364
367
  /** Settings passed to the enum resolver function. */
365
- enumResolverSettings?: object;
368
+ enumResolverSettings?: {
369
+ [key: string]: any;
370
+ } | null;
366
371
  /** Inherit the attribute value from the parent entity. */
367
372
  inherit?: boolean;
368
373
  /** Specific widget style this field should use. */
369
- widget?: string;
374
+ widget?: string | null;
370
375
  /** Any additional config specific for the widget style.(Date formats, precision etc.) */
371
- widgetSettings?: object;
376
+ widgetSettings?: {
377
+ [key: string]: any;
378
+ } | null;
372
379
  };
373
380
 
374
381
  declare type AttributeDataValue = AttributeType | null | undefined;
@@ -577,13 +584,6 @@ declare interface ColumnHeaderMenuUIProps {
577
584
 
578
585
  declare type ColumnIdAliases = Record<string, string>;
579
586
 
580
- declare type ColumnItemModel = {
581
- name: string;
582
- visible?: boolean;
583
- pinned?: boolean;
584
- width?: number;
585
- };
586
-
587
587
  export declare const ColumnMenuButton: IStyledComponentBase<"web", FastOmit< FastOmit<Omit< ButtonProps & RefAttributes<HTMLButtonElement>, "ref"> & {
588
588
  ref?: ((instance: HTMLButtonElement | null) => void | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | RefObject<HTMLButtonElement> | null | undefined;
589
589
  }, "$isOpen"> & {
@@ -731,8 +731,8 @@ export declare const createFeedMentionSource: ({ suggestions, project, taskTypes
731
731
 
732
732
  declare type CreateViewApiArg = {
733
733
  viewType: string;
734
- projectName?: string;
735
- payload: OverviewViewPostModel | TaskProgressViewPostModel | ListsViewPostModel | ReviewsViewPostModel | VersionsViewPostModel | GenericViewPostModel;
734
+ projectName?: string | null;
735
+ genericViewPostModel: GenericViewPostModel;
736
736
  };
737
737
 
738
738
  export declare const CUSTOM_RANGE_ICON = "tune";
@@ -888,7 +888,7 @@ export declare type DeleteEntitiesConfirmDialogProps = {
888
888
  declare type DeleteViewApiArg = {
889
889
  viewType: string;
890
890
  viewId: string;
891
- projectName?: string;
891
+ projectName?: string | null;
892
892
  };
893
893
 
894
894
  declare type DeliveryTemplate = {
@@ -1043,6 +1043,8 @@ declare type DetailsPanelEntityData = {
1043
1043
  status: string;
1044
1044
  updatedAt: string;
1045
1045
  createdAt: string;
1046
+ createdBy?: string | null;
1047
+ updatedBy?: string | null;
1046
1048
  thumbnailHash: string;
1047
1049
  attrib: Record<string, string | number>;
1048
1050
  hasReviewables?: boolean;
@@ -1166,6 +1168,10 @@ declare interface DetailsSectionProps {
1166
1168
  form: Record<string, any>;
1167
1169
  mixedFields?: string[];
1168
1170
  isLoading: boolean;
1171
+ users?: {
1172
+ name: string;
1173
+ fullName?: string | null;
1174
+ }[];
1169
1175
  }
1170
1176
 
1171
1177
  /**
@@ -1289,17 +1295,21 @@ declare type EntityListItemModel = {
1289
1295
  /** Position of the item in the list */
1290
1296
  position: number;
1291
1297
  /** Label of the item */
1292
- label?: string;
1298
+ label?: string | null;
1293
1299
  /** Overrides of the listed entity attributes */
1294
- attrib?: object;
1300
+ attrib?: {
1301
+ [key: string]: any;
1302
+ };
1295
1303
  /** Additional data associated with the item */
1296
- data?: Record<string, any>;
1304
+ data?: {
1305
+ [key: string]: any;
1306
+ };
1297
1307
  /** Tags associated with the item */
1298
1308
  tags?: string[];
1299
1309
  /** Path to the folder where the item is located */
1300
1310
  folderPath: string;
1301
- createdBy?: string;
1302
- updatedBy?: string;
1311
+ createdBy?: string | null;
1312
+ updatedBy?: string | null;
1303
1313
  createdAt?: string;
1304
1314
  updatedAt?: string;
1305
1315
  };
@@ -1309,7 +1319,7 @@ declare type EntityListModel = {
1309
1319
  /** Type of the list */
1310
1320
  entityListType: string;
1311
1321
  /** ID of the folder containing the list */
1312
- entityListFolderId?: string;
1322
+ entityListFolderId?: string | null;
1313
1323
  /** Type of the entity that can be included in the list */
1314
1324
  entityType: 'folder' | 'product' | 'version' | 'representation' | 'task' | 'workfile';
1315
1325
  label: string;
@@ -1318,17 +1328,23 @@ declare type EntityListModel = {
1318
1328
  [key: string]: ListAccessLevel;
1319
1329
  };
1320
1330
  /** List attributes */
1321
- attrib?: object;
1331
+ attrib?: {
1332
+ [key: string]: any;
1333
+ };
1322
1334
  /** Additional data associated with the list */
1323
- data?: Record<string, any>;
1324
- template?: object;
1335
+ data?: {
1336
+ [key: string]: any;
1337
+ };
1338
+ template?: {
1339
+ [key: string]: any;
1340
+ };
1325
1341
  /** List tags */
1326
1342
  tags?: string[];
1327
1343
  items?: EntityListItemModel[];
1328
1344
  /** Name of the user who created the list */
1329
- owner?: string;
1330
- createdBy?: string;
1331
- updatedBy?: string;
1345
+ owner?: string | null;
1346
+ createdBy?: string | null;
1347
+ updatedBy?: string | null;
1332
1348
  createdAt?: string;
1333
1349
  updatedAt?: string;
1334
1350
  /** Whether the list is active or not */
@@ -1509,19 +1525,21 @@ export declare interface EnumEditorPt {
1509
1525
  declare type EnumItem = {
1510
1526
  value: string | number | number | boolean;
1511
1527
  label: string;
1512
- description?: string;
1513
- fulltext?: string[];
1514
- group?: string;
1528
+ description?: string | null;
1529
+ fulltext?: string[] | null;
1530
+ group?: string | null;
1515
1531
  /** Icon name (material symbol) or IconModel object */
1516
- icon?: string | IconModel;
1517
- color?: string;
1518
- shortName?: string;
1532
+ icon?: string | IconModel | null;
1533
+ color?: string | null;
1534
+ shortName?: string | null;
1519
1535
  /** Enum item is visible, but not selectable */
1520
1536
  disabled?: boolean;
1521
1537
  /** Message to show when the option is disabled */
1522
- disabledMessage?: string;
1523
- /** Enum item is not offered for selection, but resolves when already used */
1538
+ disabledMessage?: string | null;
1539
+ /** Enum item is not visible in the dropdown */
1524
1540
  hidden?: boolean;
1541
+ /** Extra badge labels to display next to the item */
1542
+ badges?: string[] | null;
1525
1543
  };
1526
1544
 
1527
1545
  declare const EnumItemBody: IStyledComponentBase<"web", FastOmit<DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never> & Partial<Pick< DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>>> & string;
@@ -1627,9 +1645,58 @@ export declare const FileThumbnail: FC<FileThumbnailProps>;
1627
1645
  export declare interface FileThumbnailProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onError' | 'onLoad'> {
1628
1646
  src: string;
1629
1647
  mimetype?: string;
1648
+ /** hover-scrub filmstrip url (see getFileFilmstripUrl) */
1649
+ filmstripSrc?: string | null;
1630
1650
  imgProps?: Omit<ImgHTMLAttributes<HTMLImageElement>, 'src' | 'onError' | 'onLoad'>;
1631
1651
  }
1632
1652
 
1653
+ /**
1654
+ * Hover-scrub preview of a video thumbnail.
1655
+ *
1656
+ * Render it as the last child of a positioned thumbnail element. While the cursor is over
1657
+ * that element, the overlay shows the filmstrip frame matching the cursor position,
1658
+ * so moving the cursor left to right "plays" the video.
1659
+ */
1660
+ export declare const Filmstrip: FC<FilmstripProps>;
1661
+
1662
+ export declare const FILMSTRIP_ACTIVE_ATTRIBUTE = "data-filmstrip-active";
1663
+
1664
+ export declare const FILMSTRIP_FILE_ATTRIBUTE = "data-filmstrip-file-id";
1665
+
1666
+ export declare const FILMSTRIP_POSITION_ATTRIBUTE = "data-filmstrip-position";
1667
+
1668
+ export declare interface FilmstripData {
1669
+ fileId: string;
1670
+ url: string;
1671
+ frames: number;
1672
+ columns: number;
1673
+ frameWidth: number;
1674
+ frameHeight: number;
1675
+ }
1676
+
1677
+ /** ARC EntityCard with a hover-scrub filmstrip */
1678
+ export declare const FilmstripEntityCard: ForwardRefExoticComponent<FilmstripEntityCardProps & RefAttributes<HTMLDivElement>>;
1679
+
1680
+ export declare interface FilmstripEntityCardProps extends EntityCardProps {
1681
+ /** hover-scrub filmstrip url (see getEntityFilmstripUrl) */
1682
+ filmstripUrl?: string | null;
1683
+ }
1684
+
1685
+ export declare interface FilmstripProps {
1686
+ /** Filmstrip URL (see getEntityFilmstripUrl). Nothing happens when empty. */
1687
+ src?: string | null;
1688
+ /** Should match object-fit of the static thumbnail underneath */
1689
+ fit?: 'cover' | 'contain';
1690
+ disabled?: boolean;
1691
+ className?: string;
1692
+ style?: CSSProperties;
1693
+ }
1694
+
1695
+ export declare interface FilmstripTarget {
1696
+ position: number;
1697
+ fileId: string;
1698
+ }
1699
+
1633
1700
  export declare const FILTER_TYPES_BY_SCOPE: Record<ScopeType_2, FilterFieldType[]>;
1634
1701
 
1635
1702
  declare type FilterConfig = {
@@ -1749,19 +1816,19 @@ declare interface FolderProduct {
1749
1816
 
1750
1817
  declare type FolderSuggestionItem = {
1751
1818
  /** The date and time when the suggested entity was created */
1752
- createdAt?: string;
1819
+ createdAt?: string | null;
1753
1820
  /** The relevance score of the suggestion */
1754
- relevance?: number;
1821
+ relevance?: number | null;
1755
1822
  id: string;
1756
1823
  folderType: string;
1757
1824
  name: string;
1758
- label?: string;
1759
- thumbnailId?: string;
1825
+ label?: string | null;
1826
+ thumbnailId?: string | null;
1760
1827
  };
1761
1828
 
1762
1829
  declare type FolderType = {
1763
1830
  name: string;
1764
- original_name?: string;
1831
+ original_name?: string | null;
1765
1832
  shortName?: string;
1766
1833
  color?: string;
1767
1834
  icon?: string;
@@ -1769,7 +1836,7 @@ declare type FolderType = {
1769
1836
 
1770
1837
  declare type FolderType_2 = {
1771
1838
  name: string;
1772
- original_name?: string;
1839
+ original_name?: string | null;
1773
1840
  shortName?: string;
1774
1841
  color?: string;
1775
1842
  icon?: string;
@@ -1783,29 +1850,40 @@ declare interface FormData_2 {
1783
1850
  export { FormData_2 as FormData }
1784
1851
 
1785
1852
  declare type FormFieldPatch = {
1786
- value?: string | number | number | boolean | string[] | number[] | number[] | null;
1853
+ value?: string | number | number | boolean | string[] | number[] | number[] | FormFileData | null;
1787
1854
  label?: string;
1788
1855
  placeholder?: any;
1789
1856
  options?: FormOptionItem[];
1790
- readOnly?: boolean;
1791
- disabled?: boolean;
1857
+ enum_resolver?: string;
1858
+ enum_resolver_params?: {
1859
+ [key: string]: any;
1860
+ };
1861
+ read_only?: boolean;
1792
1862
  hidden?: boolean;
1863
+ disabled?: boolean;
1793
1864
  highlight?: 'info' | 'warning' | 'error';
1794
1865
  };
1795
1866
 
1796
1867
  declare type FormFieldRule = {
1797
- when: QueryFilter;
1868
+ /** Filter source events */
1869
+ when: QueryFilter_2;
1798
1870
  set: FormFieldPatch;
1799
1871
  };
1800
1872
 
1801
- declare interface FormFileData {
1873
+ declare type FormFileData = {
1874
+ filename: string;
1875
+ payload: string;
1876
+ download?: boolean;
1877
+ };
1878
+
1879
+ declare interface FormFileData_2 {
1802
1880
  payload: string;
1803
1881
  filename: string;
1804
1882
  download?: boolean;
1805
1883
  }
1806
1884
 
1807
1885
  declare type FormOptionItem = {
1808
- value: string | number | boolean;
1886
+ value: string | number | number | boolean;
1809
1887
  label?: string;
1810
1888
  description?: string;
1811
1889
  group?: string;
@@ -1847,16 +1925,22 @@ declare type GenericViewModel = {
1847
1925
  working: boolean;
1848
1926
  position: number;
1849
1927
  accessLevel: number;
1850
- settings: object;
1851
- access: object;
1852
1928
  viewType: string;
1929
+ settings: {
1930
+ [key: string]: any;
1931
+ };
1932
+ access: {
1933
+ [key: string]: any;
1934
+ };
1853
1935
  };
1854
1936
 
1855
1937
  declare type GenericViewPatchModel = {
1856
- label?: string;
1857
- owner?: string;
1858
- settings?: object;
1859
- viewType: string;
1938
+ label?: string | null;
1939
+ owner?: string | null;
1940
+ viewType?: string | null;
1941
+ settings?: {
1942
+ [key: string]: any;
1943
+ } | null;
1860
1944
  };
1861
1945
 
1862
1946
  declare type GenericViewPostModel = {
@@ -1866,29 +1950,25 @@ declare type GenericViewPostModel = {
1866
1950
  label: string;
1867
1951
  /** Working view is a special type of the view that automatically stores the current view settings without explicitly saving them. Working views are always private and scoped to the project */
1868
1952
  working?: boolean;
1869
- settings: object;
1870
- viewType: string;
1953
+ viewType?: string | null;
1954
+ settings: {
1955
+ [key: string]: any;
1956
+ };
1871
1957
  };
1872
1958
 
1873
1959
  declare type GetBaseViewApiArg = {
1874
1960
  viewType: string;
1875
- projectName?: string;
1961
+ projectName?: string | null;
1876
1962
  };
1877
1963
 
1878
- declare type GetBaseViewApiResponse =
1879
- /** status 200 Successful Response */
1880
- OverviewViewModel | TaskProgressViewModel | ListsViewModel | ReviewsViewModel | VersionsViewModel | GenericViewModel;
1881
-
1882
1964
  export declare const getButtonAction: (contribution: AnyContribution) => ButtonAction | undefined;
1883
1965
 
1884
1966
  declare type GetDefaultViewApiArg = {
1885
1967
  viewType: string;
1886
- projectName?: string;
1968
+ projectName?: string | null;
1887
1969
  };
1888
1970
 
1889
- declare type GetDefaultViewApiResponse =
1890
- /** status 200 Successful Response */
1891
- OverviewViewModel | TaskProgressViewModel | ListsViewModel | ReviewsViewModel | VersionsViewModel | GenericViewModel;
1971
+ declare type GetDefaultViewApiResponse = GenericViewModel;
1892
1972
 
1893
1973
  declare type GetDetailsPanelTaskQuery = {
1894
1974
  project: {
@@ -1905,6 +1985,8 @@ declare type GetDetailsPanelTaskQuery = {
1905
1985
  assignees: Array<string>;
1906
1986
  updatedAt: unknown;
1907
1987
  createdAt: unknown;
1988
+ createdBy: string | null;
1989
+ updatedBy: string | null;
1908
1990
  thumbnailHash: string;
1909
1991
  folderId: string;
1910
1992
  thumbnailId: string | null;
@@ -1946,6 +2028,15 @@ declare type GetDetailsPanelTaskQuery = {
1946
2028
  };
1947
2029
  };
1948
2030
 
2031
+ /**
2032
+ * The filmstrip frame shown under the cursor, for opening the viewer at the same reviewable
2033
+ * and frame the user was looking at.
2034
+ * Returns undefined when the event did not come from a scrubbed thumbnail.
2035
+ */
2036
+ export declare const getFilmstripTarget: (event?: {
2037
+ target: EventTarget | null;
2038
+ }) => FilmstripTarget | undefined;
2039
+
1949
2040
  export declare const getGroupedReviewables: (reviewables: ReviewableResponse[], hasTranscoder?: boolean | undefined) => {
1950
2041
  playable: ReviewableResponse[];
1951
2042
  incompatible: ReviewableResponse[];
@@ -1991,22 +2082,14 @@ export declare const getUiTypeLabel: (type: AttributeData_2["type"] | undefined,
1991
2082
  declare type GetViewApiArg = {
1992
2083
  viewType: string;
1993
2084
  viewId: string;
1994
- projectName?: string;
2085
+ projectName?: string | null;
1995
2086
  };
1996
2087
 
1997
- declare type GetViewApiResponse =
1998
- /** status 200 Successful Response */
1999
- OverviewViewModel | TaskProgressViewModel | ListsViewModel | ReviewsViewModel | VersionsViewModel | GenericViewModel;
2000
-
2001
2088
  declare type GetWorkingViewApiArg = {
2002
2089
  viewType: string;
2003
- projectName?: string;
2090
+ projectName?: string | null;
2004
2091
  };
2005
2092
 
2006
- declare type GetWorkingViewApiResponse =
2007
- /** status 200 Successful Response */
2008
- OverviewViewModel | TaskProgressViewModel | ListsViewModel | ReviewsViewModel | VersionsViewModel | GenericViewModel;
2009
-
2010
2093
  declare interface GridConfig {
2011
2094
  columns: number;
2012
2095
  rows: number;
@@ -2102,21 +2185,21 @@ declare type IconInputPt = Partial<React.ComponentProps<typeof Styled.IconSelect
2102
2185
  declare type IconModel = {
2103
2186
  type?: 'material-symbols' | 'url';
2104
2187
  /** The name of the icon (for type material-symbols) */
2105
- name?: string;
2188
+ name?: string | null;
2106
2189
  /** The color of the icon (for type material-symbols) */
2107
- color?: string;
2190
+ color?: string | null;
2108
2191
  /** The URL of the icon (for type url) */
2109
- url?: string;
2192
+ url?: string | null;
2110
2193
  };
2111
2194
 
2112
2195
  declare type IconModel_2 = {
2113
2196
  type?: 'material-symbols' | 'url';
2114
2197
  /** The name of the icon (for type material-symbols) */
2115
- name?: string;
2198
+ name?: string | null;
2116
2199
  /** The color of the icon (for type material-symbols) */
2117
- color?: string;
2200
+ color?: string | null;
2118
2201
  /** The URL of the icon (for type url) */
2119
- url?: string;
2202
+ url?: string | null;
2120
2203
  };
2121
2204
 
2122
2205
  declare const IconSelect: IStyledComponentBase<"web", FastOmit<Omit< IconSelectProps & RefAttributes<DropdownRef>, "ref"> & {
@@ -2234,7 +2317,7 @@ declare type LinkType = {
2234
2317
  link_type: string;
2235
2318
  input_type: 'folder' | 'product' | 'version' | 'representation' | 'task' | 'workfile';
2236
2319
  output_type: 'folder' | 'product' | 'version' | 'representation' | 'task' | 'workfile';
2237
- color?: string;
2320
+ color?: string | null;
2238
2321
  style?: 'solid' | 'dashed';
2239
2322
  };
2240
2323
 
@@ -2248,7 +2331,9 @@ declare type LinkTypeModel_2 = {
2248
2331
  /** Output entity type */
2249
2332
  outputType: string;
2250
2333
  /** Additional link type data */
2251
- data?: object;
2334
+ data?: {
2335
+ [key: string]: any;
2336
+ };
2252
2337
  };
2253
2338
 
2254
2339
  declare type ListAccessLevel = 0 | 10 | 20 | 30;
@@ -2275,55 +2360,9 @@ declare interface ListMetaDataProps {
2275
2360
  isLoading?: boolean;
2276
2361
  }
2277
2362
 
2278
- declare type ListsSettings = {
2279
- rowHeight?: number;
2280
- sortBy?: string | string[];
2281
- sortDesc?: boolean;
2282
- filter?: QueryFilter_5;
2283
- columns?: ColumnItemModel[];
2284
- };
2285
-
2286
- declare type ListsViewModel = {
2287
- /** Unique identifier for the view within the given scope. */
2288
- id?: string;
2289
- /** Human-readable name of the view. */
2290
- label: string;
2291
- /** Determines whether the view is only available for the given project or for all projects (studio). */
2292
- scope: 'project' | 'studio';
2293
- /** Name of the user who created the view. Owners have full control over the view, */
2294
- owner: string;
2295
- /** Visibility of the view. Public views are visible to all users, private views are only visible to the owner. */
2296
- visibility: 'public' | 'private';
2297
- /** Working view is a special type of the view that automatically stores the current view settings without explicitly saving them. Working views are always private and scoped to the project */
2298
- working: boolean;
2299
- position: number;
2300
- accessLevel: number;
2301
- settings: ListsSettings;
2302
- access: object;
2303
- viewType?: 'lists';
2304
- };
2305
-
2306
- declare type ListsViewPatchModel = {
2307
- label?: string;
2308
- owner?: string;
2309
- settings?: ListsSettings;
2310
- viewType?: 'lists';
2311
- };
2312
-
2313
- declare type ListsViewPostModel = {
2314
- /** Unique identifier for the view within the given scope. */
2315
- id?: string;
2316
- /** Human-readable name of the view. */
2317
- label: string;
2318
- /** Working view is a special type of the view that automatically stores the current view settings without explicitly saving them. Working views are always private and scoped to the project */
2319
- working?: boolean;
2320
- settings: ListsSettings;
2321
- viewType?: 'lists';
2322
- };
2323
-
2324
2363
  declare type ListViewsApiArg = {
2325
2364
  viewType: string;
2326
- projectName?: string;
2365
+ projectName?: string | null;
2327
2366
  };
2328
2367
 
2329
2368
  /**
@@ -2332,6 +2371,9 @@ declare type ListViewsApiArg = {
2332
2371
  */
2333
2372
  declare type Loader<T> = () => Promise<{ default: T }>
2334
2373
 
2374
+ /** Loads a filmstrip, deduplicating concurrent and repeated requests until it expires */
2375
+ export declare const loadFilmstrip: (src: string) => Promise<FilmstripData | null>;
2376
+
2335
2377
  export declare const LoginPage: ({ onLogin, loading, isFirstTime }: LoginPageProps) => JSX_2.Element | null;
2336
2378
 
2337
2379
  export declare interface LoginPageProps {
@@ -2724,66 +2766,16 @@ declare type OperationModel = {
2724
2766
  id?: string;
2725
2767
  type: 'create' | 'update' | 'delete';
2726
2768
  entityType: 'folder' | 'product' | 'version' | 'representation' | 'task' | 'workfile';
2727
- entityId?: string;
2728
- data?: Record<string, any>;
2769
+ entityId?: string | null;
2770
+ data?: {
2771
+ [key: string]: any;
2772
+ } | null;
2729
2773
  force?: boolean;
2730
- asUser?: string;
2731
- };
2732
-
2733
- declare type OverviewSettings = {
2734
- showHierarchy?: boolean;
2735
- rowHeight?: number;
2736
- groupBy?: string;
2737
- groupSortByDesc?: boolean;
2738
- showEmptyGroups?: boolean;
2739
- sortBy?: string | string[];
2740
- sortDesc?: boolean;
2741
- filter?: QueryFilter_5;
2742
- folderFilter?: QueryFilter_5;
2743
- sliceType?: string;
2744
- columns?: ColumnItemModel[];
2774
+ asUser?: string | null;
2745
2775
  };
2746
2776
 
2747
2777
  export declare type OverviewSettingsChange = (setting: 'columns' | 'group-by', value: any) => void;
2748
2778
 
2749
- declare type OverviewViewModel = {
2750
- /** Unique identifier for the view within the given scope. */
2751
- id?: string;
2752
- /** Human-readable name of the view. */
2753
- label: string;
2754
- /** Determines whether the view is only available for the given project or for all projects (studio). */
2755
- scope: 'project' | 'studio';
2756
- /** Name of the user who created the view. Owners have full control over the view, */
2757
- owner: string;
2758
- /** Visibility of the view. Public views are visible to all users, private views are only visible to the owner. */
2759
- visibility: 'public' | 'private';
2760
- /** Working view is a special type of the view that automatically stores the current view settings without explicitly saving them. Working views are always private and scoped to the project */
2761
- working: boolean;
2762
- position: number;
2763
- accessLevel: number;
2764
- settings: OverviewSettings;
2765
- access: object;
2766
- viewType?: 'overview';
2767
- };
2768
-
2769
- declare type OverviewViewPatchModel = {
2770
- label?: string;
2771
- owner?: string;
2772
- settings?: OverviewSettings;
2773
- viewType?: 'overview';
2774
- };
2775
-
2776
- declare type OverviewViewPostModel = {
2777
- /** Unique identifier for the view within the given scope. */
2778
- id?: string;
2779
- /** Human-readable name of the view. */
2780
- label: string;
2781
- /** Working view is a special type of the view that automatically stores the current view settings without explicitly saving them. Working views are always private and scoped to the project */
2782
- working?: boolean;
2783
- settings: OverviewSettings;
2784
- viewType?: 'overview';
2785
- };
2786
-
2787
2779
  /** Description of a page contribution (`project.page`, `studio.page`). */
2788
2780
  declare interface PageMeta {
2789
2781
  /**
@@ -2877,6 +2869,12 @@ export declare type PathSegment = {
2877
2869
  id: string;
2878
2870
  };
2879
2871
 
2872
+ /**
2873
+ * Returns a loaded filmstrip that is still valid: data, `null` (not available)
2874
+ * or `undefined` (not loaded, expired or evicted - call loadFilmstrip)
2875
+ */
2876
+ export declare const peekFilmstrip: (src: string) => FilmstripData | null | undefined;
2877
+
2880
2878
  /** What `EntityPicker` picks. */
2881
2879
  declare type PickableEntityType = 'folder' | 'task' | 'product' | 'version' | 'representation' | 'workfile'
2882
2880
 
@@ -2952,13 +2950,13 @@ declare type ProductBaseTypes = {
2952
2950
 
2953
2951
  declare type ProductSuggestionItem = {
2954
2952
  /** The date and time when the suggested entity was created */
2955
- createdAt?: string;
2953
+ createdAt?: string | null;
2956
2954
  /** The relevance score of the suggestion */
2957
- relevance?: number;
2955
+ relevance?: number | null;
2958
2956
  id: string;
2959
2957
  name: string;
2960
2958
  productType: string;
2961
- parent?: FolderSuggestionItem;
2959
+ parent?: FolderSuggestionItem | null;
2962
2960
  };
2963
2961
 
2964
2962
  declare type ProductType = {
@@ -2970,55 +2968,9 @@ declare type ProductType = {
2970
2968
 
2971
2969
  declare type ProductTypeListItem = {
2972
2970
  name: string;
2973
- baseType?: string;
2974
- color?: string;
2975
- icon?: string;
2976
- };
2977
-
2978
- declare type ProjectAttribModel = {
2979
- priority?: 'urgent' | 'high' | 'normal' | 'low';
2980
- /** Frame rate */
2981
- fps?: number;
2982
- /** Horizontal resolution */
2983
- resolutionWidth?: number;
2984
- /** Vertical resolution */
2985
- resolutionHeight?: number;
2986
- pixelAspect?: number;
2987
- clipIn?: number;
2988
- clipOut?: number;
2989
- frameStart?: number;
2990
- frameEnd?: number;
2991
- handleStart?: number;
2992
- handleEnd?: number;
2993
- /** Date and time when the project or task or asset was started */
2994
- startDate?: string;
2995
- /** Deadline date and time */
2996
- endDate?: string;
2997
- /** Textual description of the entity */
2998
- description?: string;
2999
- };
3000
-
3001
- declare type ProjectAttribModel2 = {
3002
- priority?: 'urgent' | 'high' | 'normal' | 'low';
3003
- /** Frame rate */
3004
- fps?: number;
3005
- /** Horizontal resolution */
3006
- resolutionWidth?: number;
3007
- /** Vertical resolution */
3008
- resolutionHeight?: number;
3009
- pixelAspect?: number;
3010
- clipIn?: number;
3011
- clipOut?: number;
3012
- frameStart?: number;
3013
- frameEnd?: number;
3014
- handleStart?: number;
3015
- handleEnd?: number;
3016
- /** Date and time when the project or task or asset was started */
3017
- startDate?: string;
3018
- /** Deadline date and time */
3019
- endDate?: string;
3020
- /** Textual description of the entity */
3021
- description?: string;
2971
+ baseType?: string | null;
2972
+ color?: string | null;
2973
+ icon?: string | null;
3022
2974
  };
3023
2975
 
3024
2976
  declare interface ProjectContextValue extends ProjectModelWithProducts {
@@ -3090,22 +3042,30 @@ declare interface ProjectListMenuItemContext {
3090
3042
  }
3091
3043
 
3092
3044
  declare type ProjectModel = {
3093
- /** Name is an unique id of the {entity_name} */
3045
+ /** Unique name of the project */
3094
3046
  name: string;
3095
3047
  code: string;
3096
- label?: string;
3048
+ label?: string | null;
3097
3049
  library?: boolean;
3098
3050
  folderTypes?: FolderType_2[];
3099
3051
  taskTypes?: TaskType_2[];
3100
3052
  linkTypes?: LinkTypeModel_2[];
3101
3053
  statuses?: Status_2[];
3102
3054
  tags?: Tag_2[];
3103
- config?: object;
3104
- skeleton?: boolean;
3105
- attrib?: ProjectAttribModel2;
3106
- data?: object;
3107
- /** Whether the project is active */
3055
+ config?: {
3056
+ [key: string]: any;
3057
+ };
3058
+ skeleton?: boolean | null;
3059
+ /** Attribute values of the entity */
3060
+ attrib?: {
3061
+ [key: string]: any;
3062
+ };
3063
+ data?: {
3064
+ [key: string]: any;
3065
+ };
3066
+ /** Whether the entity is active */
3108
3067
  active?: boolean;
3068
+ /** List of attributes explicitly set on the entity itself (not inherited) */
3109
3069
  ownAttrib?: string[];
3110
3070
  /** Time of creation */
3111
3071
  createdAt?: string;
@@ -3130,6 +3090,15 @@ declare interface ProjectPageLayoutProps {
3130
3090
  children: ReactNode
3131
3091
  }
3132
3092
 
3093
+ /** Description of a `project.page` contribution: a page, and what the host adds around it. */
3094
+ declare interface ProjectPageMeta extends PageMeta {
3095
+ /**
3096
+ * Shows AYON's details panel next to the page, for the page to open with `openDetails`. The page
3097
+ * is in a splitter while the panel is there; it only shows when the page opens it.
3098
+ */
3099
+ detailsPanel?: boolean
3100
+ }
3101
+
3133
3102
  export declare const ProjectPageRemote: FC<ProjectPageRemoteProps>;
3134
3103
 
3135
3104
  export declare interface ProjectPageRemoteProps extends RemotePageWrapperProps {
@@ -3230,18 +3199,18 @@ declare type QueryCondition = {
3230
3199
  /** Path to the key separated by slashes */
3231
3200
  key: string;
3232
3201
  /** Value to compare against */
3233
- value?: string | number | number | boolean | string[] | number[] | number[];
3234
- /** Comparison operator */
3235
- operator?: 'eq' | 'like' | 'notlike' | 'lt' | 'gt' | 'lte' | 'gte' | 'ne' | 'isnull' | 'notnull' | 'in' | 'notin' | 'includes' | 'excludes' | 'includesall' | 'excludesall' | 'includesany' | 'excludesany';
3202
+ value?: string | number | number | boolean | string[] | number[] | number[] | null;
3203
+ /** Comparison operator. like and notlike perform case-insensitive substring matching. One surrounding pair of % is treated as a substring wrapper; %, _ and backslashes within it are literal. */
3204
+ operator?: 'eq' | 'like' | 'notlike' | 're' | 'lt' | 'gt' | 'lte' | 'gte' | 'ne' | 'isnull' | 'notnull' | 'in' | 'notin' | 'includes' | 'excludes' | 'includesall' | 'excludesall' | 'includesany' | 'excludesany';
3236
3205
  };
3237
3206
 
3238
- declare type QueryCondition_5 = {
3207
+ declare type QueryCondition_2 = {
3239
3208
  /** Path to the key separated by slashes */
3240
3209
  key: string;
3241
3210
  /** Value to compare against */
3242
- value?: string | number | number | boolean | string[] | number[] | number[];
3243
- /** Comparison operator */
3244
- operator?: 'eq' | 'like' | 'notlike' | 'lt' | 'gt' | 'lte' | 'gte' | 'ne' | 'isnull' | 'notnull' | 'in' | 'notin' | 'includes' | 'excludes' | 'includesall' | 'excludesall' | 'includesany' | 'excludesany';
3211
+ value?: string | number | number | boolean | string[] | number[] | number[] | null;
3212
+ /** Comparison operator. like and notlike perform case-insensitive substring matching. One surrounding pair of % is treated as a substring wrapper; %, _ and backslashes within it are literal. */
3213
+ operator?: 'eq' | 'like' | 'notlike' | 're' | 'lt' | 'gt' | 'lte' | 'gte' | 'ne' | 'isnull' | 'notnull' | 'in' | 'notin' | 'includes' | 'excludes' | 'includesall' | 'excludesall' | 'includesany' | 'excludesany';
3245
3214
  };
3246
3215
 
3247
3216
  declare type QueryFilter = {
@@ -3251,9 +3220,9 @@ declare type QueryFilter = {
3251
3220
  operator?: 'and' | 'or';
3252
3221
  };
3253
3222
 
3254
- declare type QueryFilter_5 = {
3223
+ declare type QueryFilter_2 = {
3255
3224
  /** List of conditions to be evaluated */
3256
- conditions?: (QueryCondition_5 | QueryFilter_5)[];
3225
+ conditions?: (QueryCondition_2 | QueryFilter_2)[];
3257
3226
  /** Operator to use when joining conditions */
3258
3227
  operator?: 'and' | 'or';
3259
3228
  };
@@ -3360,7 +3329,7 @@ declare type RequiredAddonVersionProps = BaseProps & ({
3360
3329
 
3361
3330
  declare type ReviewableAuthor = {
3362
3331
  name: string;
3363
- fullName?: string;
3332
+ fullName?: string | null;
3364
3333
  };
3365
3334
 
3366
3335
  export declare const ReviewableCard: ForwardRefExoticComponent<ReviewableCardProps & RefAttributes<HTMLDivElement>>;
@@ -3386,20 +3355,22 @@ declare type ReviewableModel = {
3386
3355
  fileId: string;
3387
3356
  activityId: string;
3388
3357
  filename: string;
3389
- label?: string;
3358
+ label?: string | null;
3390
3359
  mimetype: string;
3391
3360
  availability?: 'unknown' | 'conversionRequired' | 'conversionRecommended' | 'ready';
3392
- mediaInfo?: object;
3393
- createdFrom?: string;
3361
+ mediaInfo?: {
3362
+ [key: string]: any;
3363
+ } | null;
3364
+ createdFrom?: string | null;
3394
3365
  /** Information about the processing status */
3395
- processing?: ReviewableProcessingStatus;
3366
+ processing?: ReviewableProcessingStatus | null;
3396
3367
  createdAt?: string;
3397
3368
  updatedAt?: string;
3398
3369
  author: ReviewableAuthor;
3399
3370
  };
3400
3371
 
3401
3372
  declare type ReviewableProcessingStatus = {
3402
- eventId?: string;
3373
+ eventId?: string | null;
3403
3374
  status: string;
3404
3375
  description: string;
3405
3376
  };
@@ -3492,54 +3463,6 @@ export declare interface ReviewableUploadProps extends React.HTMLProps<HTMLDivEl
3492
3463
  };
3493
3464
  }
3494
3465
 
3495
- declare type ReviewsSettings = {
3496
- rowHeight?: number;
3497
- sortBy?: string | string[];
3498
- sortDesc?: boolean;
3499
- filter?: QueryFilter_5;
3500
- columns?: ColumnItemModel[];
3501
- gridHeight?: number;
3502
- displayStyle?: 'cards' | 'table' | 'playlist';
3503
- };
3504
-
3505
- declare type ReviewsViewModel = {
3506
- /** Unique identifier for the view within the given scope. */
3507
- id?: string;
3508
- /** Human-readable name of the view. */
3509
- label: string;
3510
- /** Determines whether the view is only available for the given project or for all projects (studio). */
3511
- scope: 'project' | 'studio';
3512
- /** Name of the user who created the view. Owners have full control over the view, */
3513
- owner: string;
3514
- /** Visibility of the view. Public views are visible to all users, private views are only visible to the owner. */
3515
- visibility: 'public' | 'private';
3516
- /** Working view is a special type of the view that automatically stores the current view settings without explicitly saving them. Working views are always private and scoped to the project */
3517
- working: boolean;
3518
- position: number;
3519
- accessLevel: number;
3520
- settings: ReviewsSettings;
3521
- access: object;
3522
- viewType?: 'reviews';
3523
- };
3524
-
3525
- declare type ReviewsViewPatchModel = {
3526
- label?: string;
3527
- owner?: string;
3528
- settings?: ReviewsSettings;
3529
- viewType?: 'reviews';
3530
- };
3531
-
3532
- declare type ReviewsViewPostModel = {
3533
- /** Unique identifier for the view within the given scope. */
3534
- id?: string;
3535
- /** Human-readable name of the view. */
3536
- label: string;
3537
- /** Working view is a special type of the view that automatically stores the current view settings without explicitly saving them. Working views are always private and scoped to the project */
3538
- working?: boolean;
3539
- settings: ReviewsSettings;
3540
- viewType?: 'reviews';
3541
- };
3542
-
3543
3466
  declare type Root = {
3544
3467
  name: string;
3545
3468
  windows?: string;
@@ -3640,7 +3563,7 @@ declare type SerializedYouTubeNode = Spread<{
3640
3563
 
3641
3564
  declare type SetDefaultViewApiArg = {
3642
3565
  viewType: string;
3643
- projectName?: string;
3566
+ projectName?: string | null;
3644
3567
  setDefaultViewRequestModel: SetDefaultViewRequestModel;
3645
3568
  };
3646
3569
 
@@ -3708,7 +3631,7 @@ declare type ShareOption = {
3708
3631
  value: string;
3709
3632
  name: string;
3710
3633
  label: string;
3711
- attribute?: string;
3634
+ attribute?: string | null;
3712
3635
  };
3713
3636
 
3714
3637
  export declare const ShareOptionIcon: FC<ShareOptionIconProps>;
@@ -3784,7 +3707,7 @@ declare type SimpleFormField = {
3784
3707
  name: string;
3785
3708
  label?: string;
3786
3709
  placeholder?: any;
3787
- value?: string | number | number | boolean | string[] | number[] | number[];
3710
+ value?: string | number | number | boolean | string[] | number[] | number[] | FormFileData;
3788
3711
  regex?: string;
3789
3712
  multiline?: boolean;
3790
3713
  syntax?: string;
@@ -3793,7 +3716,7 @@ declare type SimpleFormField = {
3793
3716
  min?: number | number;
3794
3717
  max?: number | number;
3795
3718
  valid_extensions?: string[];
3796
- readOnly?: boolean;
3719
+ read_only?: boolean;
3797
3720
  disabled?: boolean;
3798
3721
  hidden?: boolean;
3799
3722
  enum_resolver?: string;
@@ -3814,7 +3737,7 @@ export declare interface SimpleFormProps {
3814
3737
  style?: default_2.CSSProperties;
3815
3738
  }
3816
3739
 
3817
- export declare type SimpleFormValue = string | number | boolean | string[] | number[] | FormFileData | null | undefined;
3740
+ export declare type SimpleFormValue = string | number | boolean | string[] | number[] | FormFileData_2 | null | undefined;
3818
3741
 
3819
3742
  export declare type SimpleFormValueDict = Record<string, SimpleFormValue>;
3820
3743
 
@@ -3895,7 +3818,7 @@ declare interface SlotMap {
3895
3818
  */
3896
3819
  'project.page': {
3897
3820
  version: 1
3898
- meta: PageMeta
3821
+ meta: ProjectPageMeta
3899
3822
  context: ProjectScope & SlicerScope & ProjectFoldersScope & ViewsScope
3900
3823
  pieces: { component: Loader<ComponentType<SlotProps<'project.page'>>> }
3901
3824
  }
@@ -4102,7 +4025,7 @@ export declare const splitFiltersByScope: (combinedFilter: Record<string, any> |
4102
4025
 
4103
4026
  export declare const SplitterStyles: NamedExoticComponent< ExecutionProps & object>;
4104
4027
 
4105
- export declare const StackedThumbnails: ({ thumbnails, isLoading, className, style, ...props }: StackedThumbnailsProps) => JSX_2.Element | null;
4028
+ export declare const StackedThumbnails: ({ thumbnails, isLoading, className, style, filmstrip, ...props }: StackedThumbnailsProps) => JSX_2.Element | null;
4106
4029
 
4107
4030
  export declare interface StackedThumbnailsProps extends Omit<ThumbnailProps, 'entityType' | 'entityId' | 'projectName' | 'thumbnailHash'> {
4108
4031
  thumbnails?: Thumbnail[];
@@ -4118,24 +4041,24 @@ declare type StagingDirectory = {
4118
4041
 
4119
4042
  declare type Status = {
4120
4043
  name: string;
4121
- original_name?: string;
4044
+ original_name?: string | null;
4122
4045
  shortName?: string;
4123
4046
  state?: 'not_started' | 'in_progress' | 'done' | 'blocked';
4124
4047
  icon?: string;
4125
4048
  color?: string;
4126
4049
  /** Limit the status to specific entity types. */
4127
- scope?: string[];
4050
+ scope?: string[] | null;
4128
4051
  };
4129
4052
 
4130
4053
  declare type Status_2 = {
4131
4054
  name: string;
4132
- original_name?: string;
4055
+ original_name?: string | null;
4133
4056
  shortName?: string;
4134
4057
  state?: 'not_started' | 'in_progress' | 'done' | 'blocked';
4135
4058
  icon?: string;
4136
4059
  color?: string;
4137
4060
  /** Limit the status to specific entity types. */
4138
- scope?: string[];
4061
+ scope?: string[] | null;
4139
4062
  };
4140
4063
 
4141
4064
  declare type Status_3 = {
@@ -4414,76 +4337,32 @@ declare interface TabStateByScope {
4414
4337
 
4415
4338
  declare type Tag = {
4416
4339
  name: string;
4417
- original_name?: string;
4340
+ original_name?: string | null;
4418
4341
  color?: string;
4419
4342
  };
4420
4343
 
4421
4344
  declare type Tag_2 = {
4422
4345
  name: string;
4423
- original_name?: string;
4346
+ original_name?: string | null;
4424
4347
  color?: string;
4425
4348
  };
4426
4349
 
4427
- declare type TaskProgressSettings = {
4428
- filter?: QueryFilter_5;
4429
- sliceType?: string;
4430
- columns?: ColumnItemModel[];
4431
- };
4432
-
4433
- declare type TaskProgressViewModel = {
4434
- /** Unique identifier for the view within the given scope. */
4435
- id?: string;
4436
- /** Human-readable name of the view. */
4437
- label: string;
4438
- /** Determines whether the view is only available for the given project or for all projects (studio). */
4439
- scope: 'project' | 'studio';
4440
- /** Name of the user who created the view. Owners have full control over the view, */
4441
- owner: string;
4442
- /** Visibility of the view. Public views are visible to all users, private views are only visible to the owner. */
4443
- visibility: 'public' | 'private';
4444
- /** Working view is a special type of the view that automatically stores the current view settings without explicitly saving them. Working views are always private and scoped to the project */
4445
- working: boolean;
4446
- position: number;
4447
- accessLevel: number;
4448
- settings: TaskProgressSettings;
4449
- access: object;
4450
- viewType?: 'taskProgress';
4451
- };
4452
-
4453
- declare type TaskProgressViewPatchModel = {
4454
- label?: string;
4455
- owner?: string;
4456
- settings?: TaskProgressSettings;
4457
- viewType?: 'taskProgress';
4458
- };
4459
-
4460
- declare type TaskProgressViewPostModel = {
4461
- /** Unique identifier for the view within the given scope. */
4462
- id?: string;
4463
- /** Human-readable name of the view. */
4464
- label: string;
4465
- /** Working view is a special type of the view that automatically stores the current view settings without explicitly saving them. Working views are always private and scoped to the project */
4466
- working?: boolean;
4467
- settings: TaskProgressSettings;
4468
- viewType?: 'taskProgress';
4469
- };
4470
-
4471
4350
  declare type TaskSuggestionItem = {
4472
4351
  /** The date and time when the suggested entity was created */
4473
- createdAt?: string;
4352
+ createdAt?: string | null;
4474
4353
  /** The relevance score of the suggestion */
4475
- relevance?: number;
4354
+ relevance?: number | null;
4476
4355
  id: string;
4477
4356
  taskType: string;
4478
4357
  name: string;
4479
- label?: string;
4480
- thumbnailId?: string;
4481
- parent?: FolderSuggestionItem;
4358
+ label?: string | null;
4359
+ thumbnailId?: string | null;
4360
+ parent?: FolderSuggestionItem | null;
4482
4361
  };
4483
4362
 
4484
4363
  declare type TaskType = {
4485
4364
  name: string;
4486
- original_name?: string;
4365
+ original_name?: string | null;
4487
4366
  shortName?: string;
4488
4367
  color?: string;
4489
4368
  icon?: string;
@@ -4491,7 +4370,7 @@ declare type TaskType = {
4491
4370
 
4492
4371
  declare type TaskType_2 = {
4493
4372
  name: string;
4494
- original_name?: string;
4373
+ original_name?: string | null;
4495
4374
  shortName?: string;
4496
4375
  color?: string;
4497
4376
  icon?: string;
@@ -4509,9 +4388,9 @@ export declare const TEAM_KEY_PREFIX = "team:";
4509
4388
 
4510
4389
  declare type TeamSuggestionItem = {
4511
4390
  /** The date and time when the suggested entity was created */
4512
- createdAt?: string;
4391
+ createdAt?: string | null;
4513
4392
  /** The relevance score of the suggestion */
4514
- relevance?: number;
4393
+ relevance?: number | null;
4515
4394
  name: string;
4516
4395
  };
4517
4396
 
@@ -4534,7 +4413,7 @@ declare type TextInputPt = Partial<React.ComponentProps<typeof Styled.InputText>
4534
4413
 
4535
4414
  declare type ThemeType = 'light' | 'dark';
4536
4415
 
4537
- export declare const Thumbnail: ({ projectName, entityType, entityId, icon, color, thumbnailHash, isLoading, shimmer, className, disabled, src, hoverIcon, showBorder, ...props }: ThumbnailProps) => JSX_2.Element;
4416
+ export declare const Thumbnail: ({ projectName, entityType, entityId, icon, color, thumbnailHash, isLoading, shimmer, className, disabled, src, hoverIcon, showBorder, filmstrip, ...props }: ThumbnailProps) => JSX_2.Element;
4538
4417
 
4539
4418
  export declare interface ThumbnailProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color'> {
4540
4419
  projectName?: string;
@@ -4550,6 +4429,8 @@ export declare interface ThumbnailProps extends Omit<HTMLAttributes<HTMLDivEleme
4550
4429
  src?: string;
4551
4430
  hoverIcon?: string;
4552
4431
  showBorder?: boolean;
4432
+ /** show a hover-scrub filmstrip (the entity should have reviewables) */
4433
+ filmstrip?: boolean;
4553
4434
  }
4554
4435
 
4555
4436
  export declare const ThumbnailSimple: default_2.FC<ThumbnailSimpleProps>;
@@ -4566,6 +4447,12 @@ export declare interface ThumbnailSimpleProps extends default_2.HTMLAttributes<H
4566
4447
  onLoad?: default_2.ReactEventHandler<HTMLImageElement>;
4567
4448
  onError?: default_2.ReactEventHandler<HTMLImageElement>;
4568
4449
  iconOnly?: boolean;
4450
+ /** show a hover-scrub filmstrip (the entity should have reviewables) */
4451
+ filmstrip?: boolean;
4452
+ /** filmstrip url override, when the entity props are not available */
4453
+ filmstripUrl?: string | null;
4454
+ /** should match object-fit of the image */
4455
+ filmstripFit?: 'cover' | 'contain';
4569
4456
  }
4570
4457
 
4571
4458
  /**
@@ -4617,8 +4504,8 @@ declare type UpdateSubtasksMutation = ReturnType<typeof useUpdateSubtasksMutatio
4617
4504
  declare type UpdateViewApiArg = {
4618
4505
  viewType: string;
4619
4506
  viewId: string;
4620
- projectName?: string;
4621
- payload: OverviewViewPatchModel | TaskProgressViewPatchModel | ListsViewPatchModel | ReviewsViewPatchModel | VersionsViewPatchModel | GenericViewPatchModel;
4507
+ projectName?: string | null;
4508
+ genericViewPatchModel: GenericViewPatchModel;
4622
4509
  };
4623
4510
 
4624
4511
  declare type UpdateViewSettingsFn = (updatedSettings: any, localStateSetter: (value: any) => void, newLocalValue: any, options: UpdateOptions) => Promise<void>;
@@ -4695,6 +4582,28 @@ export declare type UseDateRangeFilterReturn = {
4695
4582
  handleCustomRangeClose: () => void;
4696
4583
  };
4697
4584
 
4585
+ /**
4586
+ * Adds a hover-scrub filmstrip to an ARC EntityCard.
4587
+ *
4588
+ * EntityCard does not accept thumbnail children, but it spreads `pt.thumbnail` onto its
4589
+ * thumbnail element (ref included), so the filmstrip is portalled into that element.
4590
+ *
4591
+ * @example
4592
+ * const { thumbnailProps, filmstrip } = useEntityCardFilmstrip(filmstripUrl)
4593
+ * <EntityCard pt={{ thumbnail: thumbnailProps }} />
4594
+ * {filmstrip}
4595
+ */
4596
+ export declare const useEntityCardFilmstrip: (src?: string | null, { disabled }?: {
4597
+ disabled?: boolean;
4598
+ }) => UseEntityCardFilmstripResult;
4599
+
4600
+ declare interface UseEntityCardFilmstripResult {
4601
+ /** pass to EntityCard `pt.thumbnail` */
4602
+ thumbnailProps: Partial<HTMLAttributes<HTMLDivElement>>;
4603
+ /** render next to the EntityCard */
4604
+ filmstrip: ReactNode;
4605
+ }
4606
+
4698
4607
  export declare const useFeedback: () => FeedbackContextType;
4699
4608
 
4700
4609
  export declare const useFeedbackSafe: () => FeedbackContextType | undefined;
@@ -4706,13 +4615,6 @@ export declare const useProjectPageSlotContext: (projectName: string) => SlotMap
4706
4615
 
4707
4616
  export declare const USER_KEY_PREFIX = "user:";
4708
4617
 
4709
- declare type UserAttribModel = {
4710
- fullName?: string;
4711
- email?: string;
4712
- avatarUrl?: string;
4713
- developerMode?: boolean;
4714
- };
4715
-
4716
4618
  export declare const useReviewablesUpload: ({ projectName, versionId, taskId, folderId, productId, dispatch, onUpload, onProgress, }: UseReviewablesUploadProps) => UploadHandlers;
4717
4619
 
4718
4620
  export declare interface UseReviewablesUploadProps {
@@ -4738,13 +4640,19 @@ declare interface UserImageProps {
4738
4640
  }
4739
4641
 
4740
4642
  declare type UserModel = {
4741
- /** Name is an unique id of the {entity_name} */
4643
+ /** Unique name of the user */
4742
4644
  name: string;
4743
- uiExposureLevel?: number;
4744
- attrib?: UserAttribModel;
4745
- data?: Record<string, any>;
4746
- /** Whether the user is active */
4645
+ uiExposureLevel?: number | null;
4646
+ /** Attribute values of the entity */
4647
+ attrib?: {
4648
+ [key: string]: any;
4649
+ };
4650
+ data?: {
4651
+ [key: string]: any;
4652
+ };
4653
+ /** Whether the entity is active */
4747
4654
  active?: boolean;
4655
+ /** List of attributes explicitly set on the entity itself (not inherited) */
4748
4656
  ownAttrib?: string[];
4749
4657
  /** Time of creation */
4750
4658
  createdAt?: string;
@@ -4759,11 +4667,11 @@ declare interface UserScope {
4759
4667
 
4760
4668
  declare type UserSuggestionItem = {
4761
4669
  /** The date and time when the suggested entity was created */
4762
- createdAt?: string;
4670
+ createdAt?: string | null;
4763
4671
  /** The relevance score of the suggestion */
4764
- relevance?: number;
4672
+ relevance?: number | null;
4765
4673
  name: string;
4766
- fullName?: string;
4674
+ fullName?: string | null;
4767
4675
  };
4768
4676
 
4769
4677
  /** The context of a studio.page contribution. */
@@ -4954,7 +4862,7 @@ declare const useUpdateSubtasksMutation: <R extends Record<string, any> = ({
4954
4862
  export declare const useVersionUploadContext: () => VersionUploadContextType;
4955
4863
 
4956
4864
  declare type UseViewMutations = {
4957
- onCreateView: (payload: CreateViewApiArg['payload'], isStudioScope: boolean) => Promise<void>;
4865
+ onCreateView: (payload: GenericViewPostModel, isStudioScope: boolean) => Promise<void>;
4958
4866
  onDeleteView: (viewId: string, isStudioScope: boolean) => Promise<void>;
4959
4867
  onUpdateView: (viewId: string, payload: Partial<ViewData>, isStudioScope: boolean) => Promise<void>;
4960
4868
  onResetWorkingView: (args?: {
@@ -4966,70 +4874,15 @@ declare type UseViewMutations = {
4966
4874
  }) => Promise<string>;
4967
4875
  };
4968
4876
 
4969
- declare type VersionsSettings = {
4970
- showProducts?: boolean;
4971
- rowHeight?: number;
4972
- showGrid?: boolean;
4973
- gridHeight?: number;
4974
- featuredVersionOrder?: string[];
4975
- slicerType?: string;
4976
- groupBy?: string;
4977
- groupSortByDesc?: boolean;
4978
- showEmptyGroups?: boolean;
4979
- latestPerFolder?: boolean;
4980
- sortBy?: string | string[];
4981
- sortDesc?: boolean;
4982
- filter?: QueryFilter_5;
4983
- columns?: ColumnItemModel[];
4984
- };
4985
-
4986
4877
  declare type VersionSuggestionItem = {
4987
4878
  /** The date and time when the suggested entity was created */
4988
- createdAt?: string;
4879
+ createdAt?: string | null;
4989
4880
  /** The relevance score of the suggestion */
4990
- relevance?: number;
4881
+ relevance?: number | null;
4991
4882
  id: string;
4992
4883
  version: number;
4993
- parent?: ProductSuggestionItem;
4994
- name?: string;
4995
- };
4996
-
4997
- declare type VersionsViewModel = {
4998
- /** Unique identifier for the view within the given scope. */
4999
- id?: string;
5000
- /** Human-readable name of the view. */
5001
- label: string;
5002
- /** Determines whether the view is only available for the given project or for all projects (studio). */
5003
- scope: 'project' | 'studio';
5004
- /** Name of the user who created the view. Owners have full control over the view, */
5005
- owner: string;
5006
- /** Visibility of the view. Public views are visible to all users, private views are only visible to the owner. */
5007
- visibility: 'public' | 'private';
5008
- /** Working view is a special type of the view that automatically stores the current view settings without explicitly saving them. Working views are always private and scoped to the project */
5009
- working: boolean;
5010
- position: number;
5011
- accessLevel: number;
5012
- settings: VersionsSettings;
5013
- access: object;
5014
- viewType?: 'versions';
5015
- };
5016
-
5017
- declare type VersionsViewPatchModel = {
5018
- label?: string;
5019
- owner?: string;
5020
- settings?: VersionsSettings;
5021
- viewType?: 'versions';
5022
- };
5023
-
5024
- declare type VersionsViewPostModel = {
5025
- /** Unique identifier for the view within the given scope. */
5026
- id?: string;
5027
- /** Human-readable name of the view. */
5028
- label: string;
5029
- /** Working view is a special type of the view that automatically stores the current view settings without explicitly saving them. Working views are always private and scoped to the project */
5030
- working?: boolean;
5031
- settings: VersionsSettings;
5032
- viewType?: 'versions';
4884
+ parent?: ProductSuggestionItem | null;
4885
+ name?: string | null;
5033
4886
  };
5034
4887
 
5035
4888
  export declare const VersionUploadContext: Context<VersionUploadContextType | undefined>;
@@ -5205,15 +5058,15 @@ declare const viewsQueries: Api<BaseQueryFn<string | {
5205
5058
  getWorkingView: QueryDefinition<GetWorkingViewApiArg, BaseQueryFn<string | {
5206
5059
  document: string | DocumentNode;
5207
5060
  variables?: any;
5208
- } | FetchArgs, unknown, FetchBaseQueryError, {} | Partial<Pick< ClientError, "response" | "request">>>, string, GetWorkingViewApiResponse, "restApi", unknown>;
5061
+ } | FetchArgs, unknown, FetchBaseQueryError, {} | Partial<Pick< ClientError, "response" | "request">>>, string, GenericViewModel, "restApi", unknown>;
5209
5062
  getBaseView: QueryDefinition<GetBaseViewApiArg, BaseQueryFn<string | {
5210
5063
  document: string | DocumentNode;
5211
5064
  variables?: any;
5212
- } | FetchArgs, unknown, FetchBaseQueryError, {} | Partial<Pick< ClientError, "response" | "request">>>, string, GetBaseViewApiResponse, "restApi", unknown>;
5065
+ } | FetchArgs, unknown, FetchBaseQueryError, {} | Partial<Pick< ClientError, "response" | "request">>>, string, GenericViewModel, "restApi", unknown>;
5213
5066
  getDefaultView: QueryDefinition<GetDefaultViewApiArg, BaseQueryFn<string | {
5214
5067
  document: string | DocumentNode;
5215
5068
  variables?: any;
5216
- } | FetchArgs, unknown, FetchBaseQueryError, {} | Partial<Pick< ClientError, "response" | "request">>>, string, GetDefaultViewApiResponse, "restApi", unknown>;
5069
+ } | FetchArgs, unknown, FetchBaseQueryError, {} | Partial<Pick< ClientError, "response" | "request">>>, string, GenericViewModel, "restApi", unknown>;
5217
5070
  setDefaultView: MutationDefinition<SetDefaultViewApiArg, BaseQueryFn<string | {
5218
5071
  document: string | DocumentNode;
5219
5072
  variables?: any;
@@ -5221,12 +5074,12 @@ declare const viewsQueries: Api<BaseQueryFn<string | {
5221
5074
  getView: QueryDefinition<GetViewApiArg, BaseQueryFn<string | {
5222
5075
  document: string | DocumentNode;
5223
5076
  variables?: any;
5224
- } | FetchArgs, unknown, FetchBaseQueryError, {} | Partial<Pick< ClientError, "response" | "request">>>, string, GetViewApiResponse, "restApi", unknown>;
5225
- deleteView: MutationDefinition<DeleteViewApiArg, BaseQueryFn<string | {
5077
+ } | FetchArgs, unknown, FetchBaseQueryError, {} | Partial<Pick< ClientError, "response" | "request">>>, string, GenericViewModel, "restApi", unknown>;
5078
+ updateView: MutationDefinition<UpdateViewApiArg, BaseQueryFn<string | {
5226
5079
  document: string | DocumentNode;
5227
5080
  variables?: any;
5228
5081
  } | FetchArgs, unknown, FetchBaseQueryError, {} | Partial<Pick< ClientError, "response" | "request">>>, string, any, "restApi", unknown>;
5229
- updateView: MutationDefinition<UpdateViewApiArg, BaseQueryFn<string | {
5082
+ deleteView: MutationDefinition<DeleteViewApiArg, BaseQueryFn<string | {
5230
5083
  document: string | DocumentNode;
5231
5084
  variables?: any;
5232
5085
  } | FetchArgs, unknown, FetchBaseQueryError, {} | Partial<Pick< ClientError, "response" | "request">>>, string, any, "restApi", unknown>;
@@ -5242,15 +5095,15 @@ declare const viewsQueries: Api<BaseQueryFn<string | {
5242
5095
  getWorkingView: QueryDefinition<GetWorkingViewApiArg, BaseQueryFn<string | {
5243
5096
  document: string | DocumentNode;
5244
5097
  variables?: any;
5245
- } | FetchArgs, unknown, FetchBaseQueryError, {} | Partial<Pick< ClientError, "response" | "request">>>, string, GetWorkingViewApiResponse, "restApi", unknown>;
5098
+ } | FetchArgs, unknown, FetchBaseQueryError, {} | Partial<Pick< ClientError, "response" | "request">>>, string, GenericViewModel, "restApi", unknown>;
5246
5099
  getBaseView: QueryDefinition<GetBaseViewApiArg, BaseQueryFn<string | {
5247
5100
  document: string | DocumentNode;
5248
5101
  variables?: any;
5249
- } | FetchArgs, unknown, FetchBaseQueryError, {} | Partial<Pick< ClientError, "response" | "request">>>, string, GetBaseViewApiResponse, "restApi", unknown>;
5102
+ } | FetchArgs, unknown, FetchBaseQueryError, {} | Partial<Pick< ClientError, "response" | "request">>>, string, GenericViewModel, "restApi", unknown>;
5250
5103
  getDefaultView: QueryDefinition<GetDefaultViewApiArg, BaseQueryFn<string | {
5251
5104
  document: string | DocumentNode;
5252
5105
  variables?: any;
5253
- } | FetchArgs, unknown, FetchBaseQueryError, {} | Partial<Pick< ClientError, "response" | "request">>>, string, GetDefaultViewApiResponse, "restApi", unknown>;
5106
+ } | FetchArgs, unknown, FetchBaseQueryError, {} | Partial<Pick< ClientError, "response" | "request">>>, string, GenericViewModel, "restApi", unknown>;
5254
5107
  setDefaultView: MutationDefinition<SetDefaultViewApiArg, BaseQueryFn<string | {
5255
5108
  document: string | DocumentNode;
5256
5109
  variables?: any;
@@ -5258,12 +5111,12 @@ declare const viewsQueries: Api<BaseQueryFn<string | {
5258
5111
  getView: QueryDefinition<GetViewApiArg, BaseQueryFn<string | {
5259
5112
  document: string | DocumentNode;
5260
5113
  variables?: any;
5261
- } | FetchArgs, unknown, FetchBaseQueryError, {} | Partial<Pick< ClientError, "response" | "request">>>, string, GetViewApiResponse, "restApi", unknown>;
5262
- deleteView: MutationDefinition<DeleteViewApiArg, BaseQueryFn<string | {
5114
+ } | FetchArgs, unknown, FetchBaseQueryError, {} | Partial<Pick< ClientError, "response" | "request">>>, string, GenericViewModel, "restApi", unknown>;
5115
+ updateView: MutationDefinition<UpdateViewApiArg, BaseQueryFn<string | {
5263
5116
  document: string | DocumentNode;
5264
5117
  variables?: any;
5265
5118
  } | FetchArgs, unknown, FetchBaseQueryError, {} | Partial<Pick< ClientError, "response" | "request">>>, string, any, "restApi", unknown>;
5266
- updateView: MutationDefinition<UpdateViewApiArg, BaseQueryFn<string | {
5119
+ deleteView: MutationDefinition<DeleteViewApiArg, BaseQueryFn<string | {
5267
5120
  document: string | DocumentNode;
5268
5121
  variables?: any;
5269
5122
  } | FetchArgs, unknown, FetchBaseQueryError, {} | Partial<Pick< ClientError, "response" | "request">>>, string, any, "restApi", unknown>;