@elliemae/ds-fast-list 3.80.0-next.4 → 3.80.0-next.40

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 (48) hide show
  1. package/dist/cjs/FastList.js +2 -2
  2. package/dist/cjs/FastList.js.map +2 -2
  3. package/dist/cjs/{DSFastListDefinitions.js → constants/index.js} +8 -7
  4. package/dist/cjs/constants/index.js.map +7 -0
  5. package/dist/cjs/hooks/useFastList.js +35 -6
  6. package/dist/cjs/hooks/useFastList.js.map +2 -2
  7. package/dist/cjs/hooks/useValidateProps.js +2 -2
  8. package/dist/cjs/hooks/useValidateProps.js.map +2 -2
  9. package/dist/cjs/index.js +4 -0
  10. package/dist/cjs/index.js.map +2 -2
  11. package/dist/cjs/parts/List.js +36 -28
  12. package/dist/cjs/parts/List.js.map +2 -2
  13. package/dist/cjs/react-desc-prop-types.js +40 -4
  14. package/dist/cjs/react-desc-prop-types.js.map +2 -2
  15. package/dist/cjs/{FastListDataTestID.js → typescript-testing/slot-props.js} +13 -13
  16. package/dist/cjs/typescript-testing/slot-props.js.map +7 -0
  17. package/dist/cjs/typescript-testing/typescript-fast-list-valid.js +87 -4
  18. package/dist/cjs/typescript-testing/typescript-fast-list-valid.js.map +2 -2
  19. package/dist/esm/FastList.js +1 -1
  20. package/dist/esm/FastList.js.map +1 -1
  21. package/dist/esm/{DSFastListDefinitions.js → constants/index.js} +5 -4
  22. package/dist/esm/constants/index.js.map +7 -0
  23. package/dist/esm/hooks/useFastList.js +35 -6
  24. package/dist/esm/hooks/useFastList.js.map +2 -2
  25. package/dist/esm/hooks/useValidateProps.js +1 -1
  26. package/dist/esm/hooks/useValidateProps.js.map +1 -1
  27. package/dist/esm/index.js +4 -0
  28. package/dist/esm/index.js.map +2 -2
  29. package/dist/esm/parts/List.js +31 -23
  30. package/dist/esm/parts/List.js.map +2 -2
  31. package/dist/esm/react-desc-prop-types.js +41 -5
  32. package/dist/esm/react-desc-prop-types.js.map +2 -2
  33. package/dist/esm/typescript-testing/slot-props.js +15 -0
  34. package/dist/esm/typescript-testing/slot-props.js.map +7 -0
  35. package/dist/esm/typescript-testing/typescript-fast-list-valid.js +87 -4
  36. package/dist/esm/typescript-testing/typescript-fast-list-valid.js.map +2 -2
  37. package/dist/types/constants/index.d.ts +13 -0
  38. package/dist/types/hooks/useFastList.d.ts +1 -1
  39. package/dist/types/index.d.ts +1 -0
  40. package/dist/types/react-desc-prop-types.d.ts +34 -4
  41. package/package.json +10 -9
  42. package/dist/cjs/DSFastListDefinitions.js.map +0 -7
  43. package/dist/cjs/FastListDataTestID.js.map +0 -7
  44. package/dist/esm/DSFastListDefinitions.js.map +0 -7
  45. package/dist/esm/FastListDataTestID.js +0 -8
  46. package/dist/esm/FastListDataTestID.js.map +0 -7
  47. package/dist/types/DSFastListDefinitions.d.ts +0 -11
  48. package/dist/types/FastListDataTestID.d.ts +0 -3
@@ -0,0 +1,15 @@
1
+ import * as React from "react";
2
+ const SlotPropsAsObject = {
3
+ dsFastlistContainer: { "aria-label": "just a typescript test" },
4
+ dsFastlistWrapperList: { "aria-label": "just a typescript test" },
5
+ dsFastlistItem: { "aria-label": "just a typescript test" },
6
+ dsFastlistExtraContent: { "aria-label": "just a typescript test" }
7
+ };
8
+ const SlotPropsAsFunctions = {
9
+ dsFastlistContainer: () => ({ "aria-label": "just a typescript test" }),
10
+ dsFastlistWrapperList: () => ({ "aria-label": "just a typescript test" }),
11
+ dsFastlistItem: () => ({ "aria-label": "just a typescript test" }),
12
+ dsFastlistExtraContent: () => ({ "aria-label": "just a typescript test" })
13
+ };
14
+ const EnsureAllSlotsExistInSlotFunctionArguments = SlotPropsAsFunctions;
15
+ //# sourceMappingURL=slot-props.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../src/typescript-testing/slot-props.ts"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable @typescript-eslint/no-unused-vars, no-unused-vars */\n\nimport type { TypescriptHelpersT } from '@elliemae/ds-typescript-helpers';\nimport type { DSFastListName, DSFastListSlots } from '../constants/index.js';\nimport type { DSFastListT } from '../react-desc-prop-types.js';\n\nconst SlotPropsAsObject: Partial<DSFastListT.OptionalProps<object>> = {\n dsFastlistContainer: { 'aria-label': 'just a typescript test' },\n dsFastlistWrapperList: { 'aria-label': 'just a typescript test' },\n dsFastlistItem: { 'aria-label': 'just a typescript test' },\n dsFastlistExtraContent: { 'aria-label': 'just a typescript test' },\n};\n\nconst SlotPropsAsFunctions: DSFastListT.SlotFunctionArguments = {\n dsFastlistContainer: () => ({ 'aria-label': 'just a typescript test' }),\n dsFastlistWrapperList: () => ({ 'aria-label': 'just a typescript test' }),\n dsFastlistItem: () => ({ 'aria-label': 'just a typescript test' }),\n dsFastlistExtraContent: () => ({ 'aria-label': 'just a typescript test' }),\n};\n\n// Exhaustiveness check \u2014 fails compilation if a slot is missing from SlotFunctionArguments\nconst EnsureAllSlotsExistInSlotFunctionArguments: Required<\n TypescriptHelpersT.PropsForSlots<typeof DSFastListName, typeof DSFastListSlots>\n> = SlotPropsAsFunctions;\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACMvB,MAAM,oBAAgE;AAAA,EACpE,qBAAqB,EAAE,cAAc,yBAAyB;AAAA,EAC9D,uBAAuB,EAAE,cAAc,yBAAyB;AAAA,EAChE,gBAAgB,EAAE,cAAc,yBAAyB;AAAA,EACzD,wBAAwB,EAAE,cAAc,yBAAyB;AACnE;AAEA,MAAM,uBAA0D;AAAA,EAC9D,qBAAqB,OAAO,EAAE,cAAc,yBAAyB;AAAA,EACrE,uBAAuB,OAAO,EAAE,cAAc,yBAAyB;AAAA,EACvE,gBAAgB,OAAO,EAAE,cAAc,yBAAyB;AAAA,EAChE,wBAAwB,OAAO,EAAE,cAAc,yBAAyB;AAC1E;AAGA,MAAM,6CAEF;",
6
+ "names": []
7
+ }
@@ -6,6 +6,9 @@ const data = [1, 2, 3];
6
6
  const extraProps = { data };
7
7
  const MockItemRenderer = ({ index }) => /* @__PURE__ */ jsx("div", {});
8
8
  const actionRef = createRef();
9
+ const innerRefObject = createRef();
10
+ const innerRefCallback = (node) => {
11
+ };
9
12
  const testRequiredProps = {
10
13
  ItemRenderer: MockItemRenderer,
11
14
  count: 0,
@@ -13,7 +16,9 @@ const testRequiredProps = {
13
16
  };
14
17
  const testOptionalProps = {
15
18
  actionRef,
16
- extraItemProps: { data }
19
+ extraItemProps: { data },
20
+ innerRef: innerRefObject,
21
+ extraContent: /* @__PURE__ */ jsx("button", { type: "button", children: "Load more" })
17
22
  };
18
23
  const testPartialDefaults = {};
19
24
  const testProps = {
@@ -27,7 +32,10 @@ const testPropsAsSyntax = {
27
32
  ...testPartialDefaults
28
33
  };
29
34
  const testCompleteDefaults = {
30
- estimateSize: () => 36
35
+ estimateSize: () => 36,
36
+ paddingStart: 0,
37
+ paddingEnd: 0,
38
+ remountOnCountChange: true
31
39
  };
32
40
  const testInternalProps = {
33
41
  ...testRequiredProps,
@@ -46,7 +54,7 @@ const testExplicitDefinition = {
46
54
  actionRef,
47
55
  extraItemProps: { data }
48
56
  };
49
- const testInferedTypeCompatibility = {
57
+ const testInferredTypeCompatibility = {
50
58
  ItemRenderer: MockItemRenderer,
51
59
  count: 0,
52
60
  getId: (index) => "",
@@ -60,10 +68,59 @@ const testDefinitionAsConst = {
60
68
  actionRef,
61
69
  extraItemProps: { foo: "bar" }
62
70
  };
71
+ const testGlobalAttributes = {
72
+ ItemRenderer: MockItemRenderer,
73
+ count: 0,
74
+ getId: (index) => "",
75
+ className: "custom-class",
76
+ id: "custom-id",
77
+ "aria-label": "custom list"
78
+ };
79
+ const testContainerIntegration = {
80
+ ...testRequiredProps,
81
+ innerRef: innerRefCallback,
82
+ paddingStart: 24,
83
+ paddingEnd: -5,
84
+ remountOnCountChange: false,
85
+ extraContent: null
86
+ };
87
+ const testContainerIntegrationAsSyntax = {
88
+ ...testRequiredProps,
89
+ innerRef: innerRefObject,
90
+ paddingStart: 24,
91
+ paddingEnd: 40,
92
+ remountOnCountChange: true,
93
+ extraContent: /* @__PURE__ */ jsx("span", { children: "extra" })
94
+ };
95
+ const testContainerIntegrationAsConst = {
96
+ ...testRequiredProps,
97
+ paddingStart: 0,
98
+ paddingEnd: 0,
99
+ remountOnCountChange: false
100
+ };
101
+ const publishedScrollToOptions = { align: "start" };
102
+ const publishedAlign = publishedScrollToOptions.align;
103
+ const scrollActionOptions = { behavior: "smooth" };
104
+ const handleScrollToWithActionOptions = () => actionRef.current.scrollTo?.(1, scrollActionOptions);
105
+ const handleScrollToWithPublishedOptions = () => actionRef.current.scrollTo?.(1, publishedScrollToOptions);
106
+ const handleScrollToAlign = () => actionRef.current.scrollTo?.(1, { align: "center" });
107
+ const handleScrollToBehavior = () => actionRef.current.scrollTo?.(1, { behavior: "smooth" });
108
+ const handleScrollToBoth = () => actionRef.current.scrollTo?.(1, { align: "end", behavior: "auto" });
109
+ const handleMeasure = () => actionRef.current.measure?.();
110
+ const handleGetVisibleItems = () => actionRef.current.getVisibleItems?.() ?? [];
111
+ const handleGetMountedItems = () => actionRef.current.getMountedItems?.() ?? [];
112
+ const handleGetOffsetForIndex = () => actionRef.current.getOffsetForIndex?.(1);
113
+ const handleGetOffsetForIndexAligned = () => actionRef.current.getOffsetForIndex?.(1, "center");
114
+ const handleScrollToOffset = () => actionRef.current.scrollToOffset?.(100);
115
+ const handleScrollToOffsetWithOptions = () => actionRef.current.scrollToOffset?.(100, { behavior: "auto" });
63
116
  const ExampleUsageComponent = () => /* @__PURE__ */ jsxs(Fragment, { children: [
64
117
  /* @__PURE__ */ jsx(DSFastList, { ...testExplicitDefinition }),
65
- /* @__PURE__ */ jsx(DSFastList, { ...testInferedTypeCompatibility }),
118
+ /* @__PURE__ */ jsx(DSFastList, { ...testInferredTypeCompatibility }),
66
119
  /* @__PURE__ */ jsx(DSFastList, { ...testDefinitionAsConst }),
120
+ /* @__PURE__ */ jsx(DSFastList, { ...testGlobalAttributes }),
121
+ /* @__PURE__ */ jsx(DSFastList, { ...testContainerIntegration }),
122
+ /* @__PURE__ */ jsx(DSFastList, { ...testContainerIntegrationAsSyntax }),
123
+ /* @__PURE__ */ jsx(DSFastList, { ...testContainerIntegrationAsConst }),
67
124
  /* @__PURE__ */ jsx(
68
125
  DSFastList,
69
126
  {
@@ -73,6 +130,32 @@ const ExampleUsageComponent = () => /* @__PURE__ */ jsxs(Fragment, { children: [
73
130
  actionRef,
74
131
  extraItemProps: { foo: "bar" }
75
132
  }
133
+ ),
134
+ /* @__PURE__ */ jsx(
135
+ DSFastList,
136
+ {
137
+ ItemRenderer: MockItemRenderer,
138
+ count: 0,
139
+ getId: (index) => "",
140
+ innerRef: innerRefObject,
141
+ paddingStart: 24,
142
+ paddingEnd: -5,
143
+ remountOnCountChange: false,
144
+ extraContent: /* @__PURE__ */ jsx("button", { type: "button", children: "Load more" }),
145
+ dsFastlistExtraContent: { role: "listitem" }
146
+ }
147
+ ),
148
+ /* @__PURE__ */ jsx(
149
+ DSFastList,
150
+ {
151
+ className: "custom-class",
152
+ id: "custom-id",
153
+ "aria-label": "custom list",
154
+ "data-testid": "custom-testid",
155
+ ItemRenderer: MockItemRenderer,
156
+ count: 0,
157
+ getId: (index) => ""
158
+ }
76
159
  )
77
160
  ] });
78
161
  //# sourceMappingURL=typescript-fast-list-valid.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../src/typescript-testing/typescript-fast-list-valid.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable @typescript-eslint/no-unused-vars, no-unused-vars */\nimport { type MutableRefObject, createRef } from 'react';\nimport { DSFastList } from '../index.js';\nimport type { DSFastListT } from '../index.js';\n\nconst data = [1, 2, 3];\nconst extraProps = { data };\n// test we expose the namespace and the namespace follows our deliverable conventions\ntype ComponentPropsForApp = DSFastListT.Props<typeof extraProps>;\ntype ComponentPropsInternals = DSFastListT.InternalProps<typeof extraProps>;\ntype ComponentPropsDefaultProps = DSFastListT.DefaultProps;\ntype ComponentPropsOptionalProps = DSFastListT.OptionalProps<typeof extraProps>;\ntype ComponentPropsRequiredProps = DSFastListT.RequiredProps<typeof extraProps>;\n\nconst MockItemRenderer = ({ index }: { index: number }) => <div></div>;\n\nconst actionRef = createRef() as MutableRefObject<{ scrollTo: (index: number) => void }>;\n\nconst testRequiredProps: ComponentPropsRequiredProps = {\n ItemRenderer: MockItemRenderer,\n count: 0,\n getId: (index: number) => '',\n};\n\nconst testOptionalProps: ComponentPropsOptionalProps = {\n actionRef,\n extraItemProps: { data },\n};\n\n// difference Props and InternalProps is that InternalProps has all the default props filled in\n// Props allows for partial defaults\nconst testPartialDefaults: Partial<ComponentPropsDefaultProps> = {};\n\nconst testProps: ComponentPropsForApp = {\n ...testRequiredProps,\n ...testOptionalProps,\n ...testPartialDefaults,\n};\n\nconst testPropsAsSyntax = {\n ...testRequiredProps,\n ...testOptionalProps,\n ...testPartialDefaults,\n} as ComponentPropsForApp;\n\n// InternalProps requires all defaults to be filled in\nconst testCompleteDefaults: Required<ComponentPropsDefaultProps> = {\n estimateSize: () => 36,\n};\n\nconst testInternalProps: ComponentPropsInternals = {\n ...testRequiredProps,\n ...testOptionalProps,\n ...testCompleteDefaults,\n};\n\nconst testInternalPropsAsSyntax = {\n ...testRequiredProps,\n ...testOptionalProps,\n ...testCompleteDefaults,\n} as ComponentPropsInternals;\n\n// using the explicit type definition, if there is an error, it will be marked on the key that is wrong\nconst testExplicitDefinition: ComponentPropsForApp = {\n ItemRenderer: MockItemRenderer,\n count: 0,\n getId: (index: number) => '',\n actionRef,\n extraItemProps: { data },\n};\n\n// using the \"as\" syntax, if there is an error, it will be marking the whole object as wrong because it is not compatible with the type\nconst testInferedTypeCompatibility = {\n ItemRenderer: MockItemRenderer,\n count: 0,\n getId: (index: number) => '',\n actionRef,\n extraItemProps: { data },\n} as ComponentPropsForApp;\n\nconst testDefinitionAsConst = {\n ItemRenderer: MockItemRenderer,\n count: 0,\n getId: (index: number) => '',\n actionRef,\n extraItemProps: { foo: 'bar' },\n} as const;\n\nconst ExampleUsageComponent = () => (\n <>\n {/* works with explicitly casted props, all syntaxes */}\n <DSFastList {...testExplicitDefinition} />\n <DSFastList {...testInferedTypeCompatibility} />\n <DSFastList {...testDefinitionAsConst} />\n {/* works with inline values */}\n <DSFastList\n ItemRenderer={MockItemRenderer}\n count={0}\n getId={(index: number) => ''}\n actionRef={actionRef}\n extraItemProps={{ foo: 'bar' }}\n />\n </>\n);\n"],
5
- "mappings": "AAAA,YAAY,WAAW;ACcoC,SA2EzD,UA3EyD,KA2EzD,YA3EyD;AAb3D,SAAgC,iBAAiB;AACjD,SAAS,kBAAkB;AAG3B,MAAM,OAAO,CAAC,GAAG,GAAG,CAAC;AACrB,MAAM,aAAa,EAAE,KAAK;AAQ1B,MAAM,mBAAmB,CAAC,EAAE,MAAM,MAAyB,oBAAC,SAAI;AAEhE,MAAM,YAAY,UAAU;AAE5B,MAAM,oBAAiD;AAAA,EACrD,cAAc;AAAA,EACd,OAAO;AAAA,EACP,OAAO,CAAC,UAAkB;AAC5B;AAEA,MAAM,oBAAiD;AAAA,EACrD;AAAA,EACA,gBAAgB,EAAE,KAAK;AACzB;AAIA,MAAM,sBAA2D,CAAC;AAElE,MAAM,YAAkC;AAAA,EACtC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;AAEA,MAAM,oBAAoB;AAAA,EACxB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;AAGA,MAAM,uBAA6D;AAAA,EACjE,cAAc,MAAM;AACtB;AAEA,MAAM,oBAA6C;AAAA,EACjD,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;AAEA,MAAM,4BAA4B;AAAA,EAChC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;AAGA,MAAM,yBAA+C;AAAA,EACnD,cAAc;AAAA,EACd,OAAO;AAAA,EACP,OAAO,CAAC,UAAkB;AAAA,EAC1B;AAAA,EACA,gBAAgB,EAAE,KAAK;AACzB;AAGA,MAAM,+BAA+B;AAAA,EACnC,cAAc;AAAA,EACd,OAAO;AAAA,EACP,OAAO,CAAC,UAAkB;AAAA,EAC1B;AAAA,EACA,gBAAgB,EAAE,KAAK;AACzB;AAEA,MAAM,wBAAwB;AAAA,EAC5B,cAAc;AAAA,EACd,OAAO;AAAA,EACP,OAAO,CAAC,UAAkB;AAAA,EAC1B;AAAA,EACA,gBAAgB,EAAE,KAAK,MAAM;AAC/B;AAEA,MAAM,wBAAwB,MAC5B,iCAEE;AAAA,sBAAC,cAAY,GAAG,wBAAwB;AAAA,EACxC,oBAAC,cAAY,GAAG,8BAA8B;AAAA,EAC9C,oBAAC,cAAY,GAAG,uBAAuB;AAAA,EAEvC;AAAA,IAAC;AAAA;AAAA,MACC,cAAc;AAAA,MACd,OAAO;AAAA,MACP,OAAO,CAAC,UAAkB;AAAA,MAC1B;AAAA,MACA,gBAAgB,EAAE,KAAK,MAAM;AAAA;AAAA,EAC/B;AAAA,GACF;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable @typescript-eslint/no-unused-vars, no-unused-vars */\nimport { type MutableRefObject, createRef } from 'react';\nimport { DSFastList } from '../index.js';\nimport type { DSFastListT } from '../index.js';\n\nconst data = [1, 2, 3];\nconst extraProps = { data };\n// test we expose the namespace and the namespace follows our deliverable conventions\ntype ComponentPropsForApp = DSFastListT.Props<typeof extraProps>;\ntype ComponentPropsInternals = DSFastListT.InternalProps<typeof extraProps>;\ntype ComponentPropsDefaultProps = DSFastListT.DefaultProps;\ntype ComponentPropsOptionalProps = DSFastListT.OptionalProps<typeof extraProps>;\ntype ComponentPropsRequiredProps = DSFastListT.RequiredProps<typeof extraProps>;\n\nconst MockItemRenderer = ({ index }: { index: number }) => <div></div>;\n\n// Referencing DSFastListT.ActionRef directly (not a hand-written shape) so this file breaks if\n// the real ActionRef contract changes \u2014 a hand-written shape here would silently drift.\nconst actionRef = createRef() as MutableRefObject<DSFastListT.ActionRef>;\nconst innerRefObject = createRef() as MutableRefObject<HTMLDivElement | null>;\nconst innerRefCallback = (node: HTMLDivElement | null) => {};\n\nconst testRequiredProps: ComponentPropsRequiredProps = {\n ItemRenderer: MockItemRenderer,\n count: 0,\n getId: (index: number) => '',\n};\n\nconst testOptionalProps: ComponentPropsOptionalProps = {\n actionRef,\n extraItemProps: { data },\n innerRef: innerRefObject,\n extraContent: <button type=\"button\">Load more</button>,\n};\n\n// difference Props and InternalProps is that InternalProps has all the default props filled in\n// Props allows for partial defaults\nconst testPartialDefaults: Partial<ComponentPropsDefaultProps> = {};\n\nconst testProps: ComponentPropsForApp = {\n ...testRequiredProps,\n ...testOptionalProps,\n ...testPartialDefaults,\n};\n\nconst testPropsAsSyntax = {\n ...testRequiredProps,\n ...testOptionalProps,\n ...testPartialDefaults,\n} as ComponentPropsForApp;\n\n// InternalProps requires all defaults to be filled in\nconst testCompleteDefaults: Required<ComponentPropsDefaultProps> = {\n estimateSize: () => 36,\n paddingStart: 0,\n paddingEnd: 0,\n remountOnCountChange: true,\n};\n\nconst testInternalProps: ComponentPropsInternals = {\n ...testRequiredProps,\n ...testOptionalProps,\n ...testCompleteDefaults,\n};\n\nconst testInternalPropsAsSyntax = {\n ...testRequiredProps,\n ...testOptionalProps,\n ...testCompleteDefaults,\n} as ComponentPropsInternals;\n\n// using the explicit type definition, if there is an error, it will be marked on the key that is wrong\nconst testExplicitDefinition: ComponentPropsForApp = {\n ItemRenderer: MockItemRenderer,\n count: 0,\n getId: (index: number) => '',\n actionRef,\n extraItemProps: { data },\n};\n\n// using the \"as\" syntax, if there is an error, it will be marking the whole object as wrong because it is not compatible with the type\nconst testInferredTypeCompatibility = {\n ItemRenderer: MockItemRenderer,\n count: 0,\n getId: (index: number) => '',\n actionRef,\n extraItemProps: { data },\n} as ComponentPropsForApp;\n\nconst testDefinitionAsConst = {\n ItemRenderer: MockItemRenderer,\n count: 0,\n getId: (index: number) => '',\n actionRef,\n extraItemProps: { foo: 'bar' },\n} as const;\n\n// Global HTML/ARIA attributes (className, id, aria-*, data-*) work at runtime via\n// useGetGlobalAttributes in List.tsx \u2014 PropsT/InternalPropsT intersect with\n// Omit<GlobalAttributesT<HTMLElement>, ...> specifically so this compiles. Regression here means\n// the type/runtime contract has drifted apart again.\nconst testGlobalAttributes: ComponentPropsForApp = {\n ItemRenderer: MockItemRenderer,\n count: 0,\n getId: (index: number) => '',\n className: 'custom-class',\n id: 'custom-id',\n 'aria-label': 'custom list',\n};\n// container-integration props, all assignment styles\nconst testContainerIntegration: ComponentPropsForApp = {\n ...testRequiredProps,\n innerRef: innerRefCallback,\n paddingStart: 24,\n paddingEnd: -5,\n remountOnCountChange: false,\n extraContent: null,\n};\n\nconst testContainerIntegrationAsSyntax = {\n ...testRequiredProps,\n innerRef: innerRefObject,\n paddingStart: 24,\n paddingEnd: 40,\n remountOnCountChange: true,\n extraContent: <span>extra</span>,\n} as ComponentPropsForApp;\n\nconst testContainerIntegrationAsConst = {\n ...testRequiredProps,\n paddingStart: 0,\n paddingEnd: 0,\n remountOnCountChange: false,\n} as const;\n\n// scrollTo accepts the virtualizer's full scroll options\n// ScrollToOptions keeps its published shape: `align` is required, so reading it needs no undefined check\nconst publishedScrollToOptions: DSFastListT.ScrollToOptions = { align: 'start' };\nconst publishedAlign: 'start' | 'center' | 'end' | 'auto' = publishedScrollToOptions.align;\nconst scrollActionOptions: DSFastListT.ScrollActionOptions = { behavior: 'smooth' };\nconst handleScrollToWithActionOptions = () => actionRef.current.scrollTo?.(1, scrollActionOptions);\nconst handleScrollToWithPublishedOptions = () => actionRef.current.scrollTo?.(1, publishedScrollToOptions);\nconst handleScrollToAlign = () => actionRef.current.scrollTo?.(1, { align: 'center' });\nconst handleScrollToBehavior = () => actionRef.current.scrollTo?.(1, { behavior: 'smooth' });\nconst handleScrollToBoth = () => actionRef.current.scrollTo?.(1, { align: 'end', behavior: 'auto' });\n\n// actionRef method usages \u2014 measure() and getVisibleItems() (PUI-17898)\nconst handleMeasure = () => actionRef.current.measure?.();\nconst handleGetVisibleItems: () => number[] = () => actionRef.current.getVisibleItems?.() ?? [];\nconst handleGetMountedItems: () => number[] = () => actionRef.current.getMountedItems?.() ?? [];\n\n// single-shot scrolling primitives \u2014 getOffsetForIndex() + scrollToOffset()\nconst handleGetOffsetForIndex: () => number | undefined = () => actionRef.current.getOffsetForIndex?.(1);\nconst handleGetOffsetForIndexAligned: () => number | undefined = () =>\n actionRef.current.getOffsetForIndex?.(1, 'center');\nconst handleScrollToOffset = () => actionRef.current.scrollToOffset?.(100);\nconst handleScrollToOffsetWithOptions = () => actionRef.current.scrollToOffset?.(100, { behavior: 'auto' });\n\nconst ExampleUsageComponent = () => (\n <>\n {/* works with explicitly casted props, all syntaxes */}\n <DSFastList {...testExplicitDefinition} />\n <DSFastList {...testInferredTypeCompatibility} />\n <DSFastList {...testDefinitionAsConst} />\n <DSFastList {...testGlobalAttributes} />\n <DSFastList {...testContainerIntegration} />\n <DSFastList {...testContainerIntegrationAsSyntax} />\n <DSFastList {...testContainerIntegrationAsConst} />\n {/* works with inline values */}\n <DSFastList\n ItemRenderer={MockItemRenderer}\n count={0}\n getId={(index: number) => ''}\n actionRef={actionRef}\n extraItemProps={{ foo: 'bar' }}\n />\n {/* Inline props test \u2014 container-integration props */}\n <DSFastList\n ItemRenderer={MockItemRenderer}\n count={0}\n getId={(index: number) => ''}\n innerRef={innerRefObject}\n paddingStart={24}\n paddingEnd={-5}\n remountOnCountChange={false}\n extraContent={<button type=\"button\">Load more</button>}\n dsFastlistExtraContent={{ role: 'listitem' }}\n />\n {/* Inline props test \u2014 global HTML/ARIA attributes */}\n <DSFastList\n className=\"custom-class\"\n id=\"custom-id\"\n aria-label=\"custom list\"\n data-testid=\"custom-testid\"\n ItemRenderer={MockItemRenderer}\n count={0}\n getId={(index: number) => ''}\n />\n </>\n);\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,13 @@
1
+ export declare const DSFastListName = "DSFastlist";
2
+ export declare const DSFastListSlots: {
3
+ readonly CONTAINER: "container";
4
+ readonly WRAPPER_LIST: "wrapper-list";
5
+ readonly ITEM: "item";
6
+ readonly EXTRA_CONTENT: "extra-content";
7
+ };
8
+ export declare const DSFastListDataTestIds: {
9
+ readonly CONTAINER: "ds-fastlist-container";
10
+ readonly WRAPPER_LIST: "ds-fastlist-wrapper-list";
11
+ readonly ITEM: "ds-fastlist-item";
12
+ readonly EXTRA_CONTENT: "ds-fastlist-extra-content";
13
+ };
@@ -3,7 +3,7 @@ import { type Virtualizer } from '@tanstack/react-virtual';
3
3
  import { type DSFastListT } from '../react-desc-prop-types.js';
4
4
  export type FastListCTX = {
5
5
  instanceUid: string;
6
- parentRef: React.MutableRefObject<HTMLDivElement | null>;
6
+ containerRef: React.MutableRefObject<HTMLDivElement | null> | React.RefCallback<HTMLDivElement>;
7
7
  getVirtualItems: Virtualizer<HTMLDivElement, HTMLElement>['getVirtualItems'];
8
8
  totalSize: ReturnType<Virtualizer<HTMLDivElement, HTMLElement>['getTotalSize']>;
9
9
  measureElement: Virtualizer<HTMLDivElement, HTMLElement>['measureElement'];
@@ -1,2 +1,3 @@
1
1
  export { type DSFastListT } from './react-desc-prop-types.js';
2
2
  export { DSFastList, DSFastListWithSchema } from './FastList.js';
3
+ export { DSFastListName, DSFastListSlots, DSFastListDataTestIds } from './constants/index.js';
@@ -1,17 +1,41 @@
1
+ import type { GlobalAttributesT } from '@elliemae/ds-props-helpers';
1
2
  import { type TypescriptHelpersT } from '@elliemae/ds-typescript-helpers';
2
3
  import type React from 'react';
3
- import type { DSFastListName, DSFastListSlots } from './DSFastListDefinitions.js';
4
+ import { DSFastListName, DSFastListSlots } from './constants/index.js';
4
5
  export declare namespace DSFastListT {
5
6
  type ScrollAlignment = 'start' | 'center' | 'end' | 'auto';
7
+ /** Kept with its published shape (`align` required) so code that reads it keeps compiling. */
6
8
  type ScrollToOptions = {
7
9
  align: ScrollAlignment;
8
10
  };
11
+ /** What the scroll actions accept: `align` is optional and `behavior` can request a smooth scroll. */
12
+ type ScrollActionOptions = {
13
+ align?: ScrollAlignment;
14
+ behavior?: 'auto' | 'smooth';
15
+ };
16
+ /**
17
+ * `scrollTo` and `scrollToOffset` use method syntax on purpose: their parameters are compared bivariantly, so an
18
+ * `actionRef` typed with the published `(index, options?: ScrollToOptions) => void` stays assignable.
19
+ */
9
20
  type ActionRef = {
10
- scrollTo?: (index: number, options?: ScrollToOptions | undefined) => void;
21
+ scrollTo?(index: number, options?: ScrollActionOptions): void;
22
+ measure?: () => void;
23
+ getVisibleItems?: () => number[];
24
+ getMountedItems?: () => number[];
25
+ getOffsetForIndex?: (index: number, align?: ScrollAlignment) => number | undefined;
26
+ scrollToOffset?(offset: number, options?: ScrollActionOptions): void;
27
+ };
28
+ type SlotFunctionArguments = {
29
+ dsFastlistContainer: () => object;
30
+ dsFastlistWrapperList: () => object;
31
+ dsFastlistItem: () => object;
32
+ dsFastlistExtraContent: () => object;
11
33
  };
12
34
  interface OptionalProps<ExtraItemPropsT> extends TypescriptHelpersT.PropsForGlobalOnSlots<typeof DSFastListName, typeof DSFastListSlots> {
13
35
  actionRef?: React.MutableRefObject<ActionRef>;
14
36
  extraItemProps?: ExtraItemPropsT;
37
+ innerRef?: React.MutableRefObject<HTMLDivElement | null> | React.RefCallback<HTMLDivElement>;
38
+ extraContent?: React.ReactNode;
15
39
  }
16
40
  interface RequiredProps<ExtraItemPropsT> {
17
41
  ItemRenderer: React.ComponentType<{
@@ -23,13 +47,19 @@ export declare namespace DSFastListT {
23
47
  }
24
48
  interface DefaultProps {
25
49
  estimateSize: () => number;
50
+ paddingStart: number;
51
+ paddingEnd: number;
52
+ remountOnCountChange: boolean;
26
53
  }
27
- type PropsT<D, R, O> = Partial<D> & R & O;
28
- type InternalPropsT<D, R, O> = D & R & O;
54
+ type PropsT<D, R, O> = Partial<D> & R & O & Omit<GlobalAttributesT<HTMLElement>, keyof D | keyof R | 'children'>;
55
+ type InternalPropsT<D, R, O> = D & R & O & Omit<GlobalAttributesT<HTMLElement>, keyof D | keyof R | 'children'>;
29
56
  type Props<ExtraItemPropsT> = PropsT<DefaultProps, RequiredProps<ExtraItemPropsT>, OptionalProps<ExtraItemPropsT>>;
30
57
  type InternalProps<ExtraItemPropsT> = InternalPropsT<DefaultProps, RequiredProps<ExtraItemPropsT>, OptionalProps<ExtraItemPropsT>>;
31
58
  }
32
59
  export declare const defaultProps: {
33
60
  estimateSize: () => number;
61
+ paddingStart: number;
62
+ paddingEnd: number;
63
+ remountOnCountChange: boolean;
34
64
  };
35
65
  export declare const DSFastListPropTypes: React.WeakValidationMap<unknown>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elliemae/ds-fast-list",
3
- "version": "3.80.0-next.4",
3
+ "version": "3.80.0-next.40",
4
4
  "license": "MIT",
5
5
  "description": "ICE MT - Dimsum - Virtual List",
6
6
  "files": [
@@ -36,17 +36,18 @@
36
36
  "indent": 4
37
37
  },
38
38
  "dependencies": {
39
+ "@elliemae/ds-props-helpers": "3.80.0-next.40",
40
+ "@elliemae/ds-system": "3.80.0-next.40",
41
+ "@elliemae/ds-typescript-helpers": "3.80.0-next.40",
39
42
  "@tanstack/react-virtual": "3.13.18",
40
- "uid": "^2.0.2",
41
- "@elliemae/ds-props-helpers": "3.80.0-next.4",
42
- "@elliemae/ds-system": "3.80.0-next.4",
43
- "@elliemae/ds-typescript-helpers": "3.80.0-next.4"
43
+ "uid": "^2.0.2"
44
44
  },
45
45
  "devDependencies": {
46
+ "@elliemae/ds-monorepo-devops": "3.80.0-next.40",
47
+ "@elliemae/ds-test-utils": "3.80.0-next.40",
48
+ "@playwright/experimental-ct-react": "1.61.1",
46
49
  "jest": "^30.0.0",
47
- "styled-components": "~5.3.11",
48
- "@elliemae/ds-monorepo-devops": "3.80.0-next.4",
49
- "@elliemae/ds-test-utils": "3.80.0-next.4"
50
+ "styled-components": "~5.3.11"
50
51
  },
51
52
  "peerDependencies": {
52
53
  "lodash-es": "^4.18.1",
@@ -59,7 +60,7 @@
59
60
  "typeSafety": true
60
61
  },
61
62
  "scripts": {
62
- "test": "ds-monorepo-devops test --passWithNoTests --coverage=\"false\"",
63
+ "test": "playwright test -c ./playwright.config.mjs && ds-monorepo-devops test --passWithNoTests --coverage=\"false\"",
63
64
  "lint": "node ../../../scripts/lint.mjs --fix",
64
65
  "lint:strict": "node ../../../scripts/lint-strict.mjs",
65
66
  "dts": "node ../../../scripts/dts.mjs",
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/DSFastListDefinitions.tsx", "../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["import { slotObjectToDataTestIds } from '@elliemae/ds-system';\n\nexport const DSFastListName = 'DSFastlist';\nexport const DSFastListSlots = {\n CONTAINER: 'container',\n WRAPPER_LIST: 'wrapper-list',\n ITEM: 'item',\n};\n\nexport const DSCardV3DataTestIds = slotObjectToDataTestIds(DSFastListName, DSFastListSlots);\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,uBAAwC;AAEjC,MAAM,iBAAiB;AACvB,MAAM,kBAAkB;AAAA,EAC7B,WAAW;AAAA,EACX,cAAc;AAAA,EACd,MAAM;AACR;AAEO,MAAM,0BAAsB,0CAAwB,gBAAgB,eAAe;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/FastListDataTestID.tsx", "../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["export const LIST_DATA_TESTID = {\n CONTAINER: 'fast-list-container',\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAhB,MAAM,mBAAmB;AAAA,EAC9B,WAAW;AACb;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../src/DSFastListDefinitions.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { slotObjectToDataTestIds } from '@elliemae/ds-system';\n\nexport const DSFastListName = 'DSFastlist';\nexport const DSFastListSlots = {\n CONTAINER: 'container',\n WRAPPER_LIST: 'wrapper-list',\n ITEM: 'item',\n};\n\nexport const DSCardV3DataTestIds = slotObjectToDataTestIds(DSFastListName, DSFastListSlots);\n"],
5
- "mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,+BAA+B;AAEjC,MAAM,iBAAiB;AACvB,MAAM,kBAAkB;AAAA,EAC7B,WAAW;AAAA,EACX,cAAc;AAAA,EACd,MAAM;AACR;AAEO,MAAM,sBAAsB,wBAAwB,gBAAgB,eAAe;",
6
- "names": []
7
- }
@@ -1,8 +0,0 @@
1
- import * as React from "react";
2
- const LIST_DATA_TESTID = {
3
- CONTAINER: "fast-list-container"
4
- };
5
- export {
6
- LIST_DATA_TESTID
7
- };
8
- //# sourceMappingURL=FastListDataTestID.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../src/FastListDataTestID.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "export const LIST_DATA_TESTID = {\n CONTAINER: 'fast-list-container',\n};\n"],
5
- "mappings": "AAAA,YAAY,WAAW;ACAhB,MAAM,mBAAmB;AAAA,EAC9B,WAAW;AACb;",
6
- "names": []
7
- }
@@ -1,11 +0,0 @@
1
- export declare const DSFastListName = "DSFastlist";
2
- export declare const DSFastListSlots: {
3
- CONTAINER: string;
4
- WRAPPER_LIST: string;
5
- ITEM: string;
6
- };
7
- export declare const DSCardV3DataTestIds: {
8
- CONTAINER: `ds-fastlist-${string}`;
9
- WRAPPER_LIST: `ds-fastlist-${string}`;
10
- ITEM: `ds-fastlist-${string}`;
11
- };
@@ -1,3 +0,0 @@
1
- export declare const LIST_DATA_TESTID: {
2
- CONTAINER: string;
3
- };