@instructure/platform-modules 0.3.0 → 0.4.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 (73) hide show
  1. package/dist/adapters/canvasGraphql/index.d.ts +7 -33
  2. package/dist/adapters/canvasGraphql/index.d.ts.map +1 -1
  3. package/dist/adapters/canvasGraphql/normalize.d.ts +44 -186
  4. package/dist/adapters/canvasGraphql/normalize.d.ts.map +1 -1
  5. package/dist/adapters/canvasGraphql/queries.d.ts +8 -36
  6. package/dist/adapters/canvasGraphql/queries.d.ts.map +1 -1
  7. package/dist/adapters/inMemory.d.ts +1 -25
  8. package/dist/adapters/inMemory.d.ts.map +1 -1
  9. package/dist/adapters/limits.d.ts +17 -74
  10. package/dist/adapters/limits.d.ts.map +1 -1
  11. package/dist/adapters/types.d.ts +10 -40
  12. package/dist/adapters/types.d.ts.map +1 -1
  13. package/dist/cache/invalidate.d.ts +0 -23
  14. package/dist/cache/invalidate.d.ts.map +1 -1
  15. package/dist/cache/keys.d.ts +2 -43
  16. package/dist/cache/keys.d.ts.map +1 -1
  17. package/dist/components/FilterChips.d.ts +4 -10
  18. package/dist/components/FilterChips.d.ts.map +1 -1
  19. package/dist/components/ModuleCard.d.ts +10 -25
  20. package/dist/components/ModuleCard.d.ts.map +1 -1
  21. package/dist/components/ModuleCard.stories.d.ts +15 -0
  22. package/dist/components/ModuleCard.stories.d.ts.map +1 -1
  23. package/dist/components/ModuleItemRow.d.ts.map +1 -1
  24. package/dist/components/ModuleNumberBadge.d.ts.map +1 -1
  25. package/dist/components/ModulesList.d.ts +2 -23
  26. package/dist/components/ModulesList.d.ts.map +1 -1
  27. package/dist/components/ModulesList.stories.d.ts +22 -81
  28. package/dist/components/ModulesList.stories.d.ts.map +1 -1
  29. package/dist/components/StatusPill.d.ts +0 -3
  30. package/dist/components/StatusPill.d.ts.map +1 -1
  31. package/dist/components/index.d.ts +1 -1
  32. package/dist/components/index.d.ts.map +1 -1
  33. package/dist/components/labels.d.ts +26 -43
  34. package/dist/components/labels.d.ts.map +1 -1
  35. package/dist/config/context.d.ts +0 -1
  36. package/dist/config/context.d.ts.map +1 -1
  37. package/dist/config/registry.d.ts +5 -13
  38. package/dist/config/registry.d.ts.map +1 -1
  39. package/dist/config/types.d.ts +0 -3
  40. package/dist/config/types.d.ts.map +1 -1
  41. package/dist/fixtures/generate.d.ts +6 -17
  42. package/dist/fixtures/generate.d.ts.map +1 -1
  43. package/dist/fixtures/index.d.ts +1 -1
  44. package/dist/fixtures/index.d.ts.map +1 -1
  45. package/dist/fixtures/scenarios.d.ts +7 -32
  46. package/dist/fixtures/scenarios.d.ts.map +1 -1
  47. package/dist/hooks/constants.d.ts +4 -21
  48. package/dist/hooks/constants.d.ts.map +1 -1
  49. package/dist/hooks/queryOptions.d.ts +3 -24
  50. package/dist/hooks/queryOptions.d.ts.map +1 -1
  51. package/dist/hooks/useItemsMode.d.ts +3 -52
  52. package/dist/hooks/useItemsMode.d.ts.map +1 -1
  53. package/dist/hooks/useModuleItemQueries.d.ts +0 -38
  54. package/dist/hooks/useModuleItemQueries.d.ts.map +1 -1
  55. package/dist/hooks/useModulesPageData.d.ts +3 -29
  56. package/dist/hooks/useModulesPageData.d.ts.map +1 -1
  57. package/dist/i18n.d.ts +13 -20
  58. package/dist/i18n.d.ts.map +1 -1
  59. package/dist/index.d.ts +3 -10
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +1223 -1076
  62. package/dist/types/domain.d.ts +25 -80
  63. package/dist/types/domain.d.ts.map +1 -1
  64. package/dist/types/enums.d.ts +10 -41
  65. package/dist/types/enums.d.ts.map +1 -1
  66. package/dist/types/extensions.d.ts +0 -21
  67. package/dist/types/extensions.d.ts.map +1 -1
  68. package/dist/types/index.d.ts +2 -2
  69. package/dist/types/index.d.ts.map +1 -1
  70. package/dist/types/schemas.d.ts +5 -26
  71. package/dist/types/schemas.d.ts.map +1 -1
  72. package/locales/en.json +7 -7
  73. package/package.json +22 -19
@@ -3,20 +3,7 @@ import { LimitFunction } from 'p-limit';
3
3
  import { ModulesDataAdapter } from '../adapters/types';
4
4
  import { ModuleItemsKey, ModulesListKey, ModulesView } from '../cache/keys';
5
5
  import { ModuleItemsPage, ModulesPage } from '../types/domain';
6
- /**
7
- * The two query definitions this package has, factored out of the hooks.
8
- *
9
- * They live here because the same definition is consumed two ways: through
10
- * `useInfiniteQuery` (one module, one hook) and through a raw
11
- * `InfiniteQueryObserver` (a dynamic set of expanded modules, which React's
12
- * rules of hooks will not let you express as N `useInfiniteQuery` calls).
13
- * Sharing the factory is what guarantees both paths land on the *same* cache
14
- * entry, so a module fetched by one is a cache hit for the other.
15
- */
16
- /**
17
- * The page cursor. `null` is the first page — the adapter contract forbids
18
- * synthesizing cursors, so this is only ever `null` or something a server said.
19
- */
6
+ /** `null` is the first page; otherwise only ever something a server said. */
20
7
  export type ModulesCursor = string | null;
21
8
  export type ModulesQueryOptions = InfiniteQueryObserverOptions<ModulesPage, Error, InfiniteData<ModulesPage, ModulesCursor>, ModulesListKey, ModulesCursor>;
22
9
  export type ModuleItemsQueryOptions = InfiniteQueryObserverOptions<ModuleItemsPage, Error, InfiniteData<ModuleItemsPage, ModulesCursor>, ModuleItemsKey, ModulesCursor>;
@@ -38,19 +25,11 @@ export interface ModuleItemsQueryArgs {
38
25
  moduleId: string;
39
26
  adapter: ModulesDataAdapter;
40
27
  pageSize: number;
41
- /**
42
- * The audience this page is rendered for. Not sent to the adapter — a host
43
- * configures its adapter for the current user — but it partitions the key,
44
- * because `published` is a per-item field. See `ModuleItemsKeyOptions`.
45
- */
28
+ /** Not sent to the adapter; it partitions the key. @see ModuleItemsKeyOptions */
46
29
  view?: ModulesView;
47
30
  staleTime: number;
48
31
  enabled: boolean;
49
- /**
50
- * Shared concurrency gate. Every expanded module's item fetch goes through
51
- * the same limiter instance, so "expand all" is a trickle rather than a
52
- * thundering herd.
53
- */
32
+ /** One limiter instance for every module, so "expand all" is a trickle. */
54
33
  limit?: LimitFunction;
55
34
  }
56
35
  export declare function modulesQueryOptions(args: ModulesQueryArgs): ModulesQueryOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"queryOptions.d.ts","sourceRoot":"","sources":["../../src/hooks/queryOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAA;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,WAAW,EACjB,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAEnE;;;;;;;;;GASG;AAEH;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,IAAI,CAAA;AAEzC,MAAM,MAAM,mBAAmB,GAAG,4BAA4B,CAC5D,WAAW,EACX,KAAK,EACL,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,EACxC,cAAc,EACd,aAAa,CACd,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG,4BAA4B,CAChE,eAAe,EACf,KAAK,EACL,YAAY,CAAC,eAAe,EAAE,aAAa,CAAC,EAC5C,cAAc,EACd,aAAa,CACd,CAAA;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,kBAAkB,CAAA;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,OAAO,CAAA;IACrB,uFAAuF;IACvF,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,kBAAkB,CAAA;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB;;;;OAIG;IACH,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,aAAa,CAAA;CACtB;AAYD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,mBAAmB,CAmC/E;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,oBAAoB,GAAG,uBAAuB,CAyB3F"}
1
+ {"version":3,"file":"queryOptions.d.ts","sourceRoot":"","sources":["../../src/hooks/queryOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAA;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,WAAW,EACjB,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAKnE,6EAA6E;AAC7E,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,IAAI,CAAA;AAEzC,MAAM,MAAM,mBAAmB,GAAG,4BAA4B,CAC5D,WAAW,EACX,KAAK,EACL,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,EACxC,cAAc,EACd,aAAa,CACd,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG,4BAA4B,CAChE,eAAe,EACf,KAAK,EACL,YAAY,CAAC,eAAe,EAAE,aAAa,CAAC,EAC5C,cAAc,EACd,aAAa,CACd,CAAA;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,kBAAkB,CAAA;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,OAAO,CAAA;IACrB,uFAAuF;IACvF,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,kBAAkB,CAAA;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,iFAAiF;IACjF,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,aAAa,CAAA;CACtB;AAQD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,mBAAmB,CAiC/E;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,oBAAoB,GAAG,uBAAuB,CAuB3F"}
@@ -1,17 +1,6 @@
1
1
  import { ModulesDataAdapter } from '../adapters/types';
2
2
  import { ModulesView } from '../cache/keys';
3
3
  import { ModulesPage } from '../types/domain';
4
- /**
5
- * How a course's module items get fetched.
6
- *
7
- * - `inline` — ask for items alongside the module list. One round trip for the
8
- * whole page. Great for a small course, ruinous for a big one: the response
9
- * grows with the number of items, and no module over `inlineThreshold` is
10
- * inlined on either transport anyway (@see INLINE_ITEM_LIMIT).
11
- * - `onDemand` — fetch a module's items when it is expanded. Constant-cost
12
- * first paint, one extra request per module the user actually opens.
13
- * - `auto` — probe, then pick. The default.
14
- */
15
4
  export type ItemsMode = 'auto' | 'inline' | 'onDemand';
16
5
  /** What `auto` collapses to. */
17
6
  export type ResolvedItemsMode = 'inline' | 'onDemand';
@@ -59,49 +48,11 @@ export interface InlineQueryShape {
59
48
  /** The largest `itemCount` among them. */
60
49
  maxItemCount: number;
61
50
  }
62
- /**
63
- * The policy itself, as a pure function over the probe's first page.
64
- *
65
- * Inline is chosen only when all three hold:
66
- *
67
- * 1. The first page is the whole list. If there is a second page of modules,
68
- * the course total is unknown, and guessing from a partial view is how you
69
- * end up inlining a 3000-item course. Conservative on purpose.
70
- * 2. No single module exceeds `inlineThreshold`. Above it no adapter inlines
71
- * the module — REST because Canvas drops the `items` key, GraphQL because
72
- * this package declines to — so inlining buys nothing there and it would
73
- * need an on-demand fetch regardless.
74
- * 3. The course total is within `inlineThreshold * 2`. One module at the
75
- * ceiling is fine; forty of them is a payload nobody asked for.
76
- * 4. The implied request fits Canvas's complexity budget. Rules 1-3 bound the
77
- * *data*; this one bounds the *query*, and they are not the same thing.
78
- * @see INLINE_QUERY_NODE_BUDGET
79
- *
80
- * Exported so the policy can be unit-tested without React.
81
- */
82
51
  export declare function resolveItemsMode(firstPage: ModulesPage, inlineThreshold: number, nodeBudget?: number): ResolvedItemsMode;
83
52
  /**
84
- * Resolves the items mode for a course.
85
- *
86
- * An explicit `mode` skips the probe entirely the probe query is disabled, so
87
- * it costs zero requests.
88
- *
89
- * For `auto`, the probe *is* the module list query with `includeItems: false`.
90
- * That matters: if the probe resolves to `onDemand`, the page's own list query
91
- * has the identical cache key and the probe becomes the first page for free. A
92
- * second request happens only when the answer is `inline`, because inlined
93
- * modules are a genuinely different payload and get their own key.
94
- *
95
- * Known cost of that shape, in the `auto -> inline` case only: the probe query
96
- * stays mounted and enabled on its own key alongside the list query's, since
97
- * `cache/keys.ts` partitions on `includeItems`. So `invalidateModuleList` refetches
98
- * both where one would do, and a course that changes shape between refetches can
99
- * flip the resolved mode mid-session. Neither is wrong, but neither is free —
100
- * disabling the probe once it has answered would fix the first and make the second
101
- * explicit.
102
- *
103
- * The decision is read from page 1 only, so paging further into the list can
104
- * never flip the mode out from under a rendered page.
53
+ * For `auto` the probe *is* the list query with `includeItems: false`, so an `onDemand`
54
+ * answer costs nothing — same cache key. Known cost of an `inline` answer: the probe stays
55
+ * mounted on its own key, so `invalidateModuleList` refetches both.
105
56
  */
106
57
  export declare function useItemsMode(options: UseItemsModeOptions): UseItemsModeResult;
107
58
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"useItemsMode.d.ts","sourceRoot":"","sources":["../../src/hooks/useItemsMode.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAIlD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAA;AAEtD,gCAAgC;AAChC,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,UAAU,CAAA;AAErD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,kBAAkB,CAAA;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,+EAA+E;IAC/E,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,wDAAwD;IACxD,YAAY,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACtC,WAAW,EAAE,OAAO,CAAA;IACpB,8EAA8E;IAC9E,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB;;;;;;;;;;OAUG;IACH,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAA;CACrC;AAED,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,yBAAyB;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,0CAA0C;IAC1C,YAAY,EAAE,MAAM,CAAA;CACrB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,WAAW,EACtB,eAAe,EAAE,MAAM,EACvB,UAAU,GAAE,MAAiC,GAC5C,iBAAiB,CAuBnB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB,CA6D7E;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,WAAW,GAAG,gBAAgB,CAMtE"}
1
+ {"version":3,"file":"useItemsMode.d.ts","sourceRoot":"","sources":["../../src/hooks/useItemsMode.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAIlD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAA;AAEtD,gCAAgC;AAChC,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,UAAU,CAAA;AAErD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,kBAAkB,CAAA;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,+EAA+E;IAC/E,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,wDAAwD;IACxD,YAAY,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACtC,WAAW,EAAE,OAAO,CAAA;IACpB,8EAA8E;IAC9E,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB;;;;;;;;;;OAUG;IACH,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAA;CACrC;AAED,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,yBAAyB;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,0CAA0C;IAC1C,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,WAAW,EACtB,eAAe,EAAE,MAAM,EACvB,UAAU,GAAE,MAAiC,GAC5C,iBAAiB,CAoBnB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB,CA6D7E;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,WAAW,GAAG,gBAAgB,CAMtE"}
@@ -1,44 +1,6 @@
1
1
  import { InfiniteData, InfiniteQueryObserverResult } from '@tanstack/react-query';
2
2
  import { ModuleItemsPage } from '../types/domain';
3
3
  import { ModuleItemsQueryOptions, ModulesCursor } from './queryOptions';
4
- /**
5
- * A dynamic set of module-item infinite queries.
6
- *
7
- * ## Why this is not N `useModuleItems` calls
8
- *
9
- * The number of expanded modules changes at runtime, and React's rules of hooks
10
- * forbid a variable number of hook calls. `useQueries` would solve it for plain
11
- * queries, but it builds `QueryObserver`s, not `InfiniteQueryObserver`s — there
12
- * is no `useInfiniteQueries`. So this hook does what `useQueries` does
13
- * internally: it owns a map of observers keyed by module id, subscribes to each,
14
- * and republishes their results into React state.
15
- *
16
- * The observers are built from the same `moduleItemsQueryOptions` factory
17
- * `useModuleItems` uses, so both paths hit the same cache entry.
18
- *
19
- * ## Why a collapsed module keeps its observer
20
- *
21
- * Collapsing flips a module's options to `enabled: false` and leaves the
22
- * subscription in place, which pins the cache entry no matter how aggressive the
23
- * host's `gcTime` is. Re-expanding is then a cache hit by construction rather
24
- * than by luck.
25
- *
26
- * ## Why the retained set is nevertheless bounded
27
- *
28
- * "Bounded by the modules a user actually opened" is only reassuring while
29
- * opening a module is a click. `ModulesList` has an "Expand all", which on the
30
- * 120-module fixture would leave 120 subscribed `InfiniteQueryObserver`s alive
31
- * for the life of the page — each pinning its own pages of items — even after
32
- * the user collapsed the lot.
33
- *
34
- * So retention is capped at `retainCollapsedLimit` *collapsed* observers, evicted
35
- * least-recently-active first. Active observers are never evicted, whatever the
36
- * limit: they are the ones with something on screen. Eviction destroys the
37
- * observer, which unpins its cache entry and lets the host's `gcTime` apply —
38
- * meaning re-expanding an evicted module may refetch. That is the trade, and it
39
- * is the right way round: a guaranteed cache hit on the last N modules touched
40
- * beats an unbounded set of subscriptions.
41
- */
42
4
  type ItemsData = InfiniteData<ModuleItemsPage, ModulesCursor>;
43
5
  export type ModuleItemsObserverResult = InfiniteQueryObserverResult<ItemsData, Error>;
44
6
  export interface ModuleItemQueries {
@@ -1 +1 @@
1
- {"version":3,"file":"useModuleItemQueries.d.ts","sourceRoot":"","sources":["../../src/hooks/useModuleItemQueries.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,2BAA2B,EACjC,MAAM,uBAAuB,CAAA;AAG9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,KAAK,SAAS,GAAG,YAAY,CAAC,eAAe,EAAE,aAAa,CAAC,CAAA;AAE7D,MAAM,MAAM,yBAAyB,GAAG,2BAA2B,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;AAUrF,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAA;IACvD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;CAC1C;AAOD,wBAAgB,oBAAoB;AAClC,wDAAwD;AACxD,eAAe,EAAE,SAAS,MAAM,EAAE;AAClC,+DAA+D;AAC/D,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,uBAAuB;AAC7E,0CAA0C;AAC1C,oBAAoB,GAAE,MAAuC,GAC5D,iBAAiB,CAoGnB"}
1
+ {"version":3,"file":"useModuleItemQueries.d.ts","sourceRoot":"","sources":["../../src/hooks/useModuleItemQueries.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,2BAA2B,EACjC,MAAM,uBAAuB,CAAA;AAG9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAM5E,KAAK,SAAS,GAAG,YAAY,CAAC,eAAe,EAAE,aAAa,CAAC,CAAA;AAE7D,MAAM,MAAM,yBAAyB,GAAG,2BAA2B,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;AAUrF,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAA;IACvD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;CAC1C;AAOD,wBAAgB,oBAAoB;AAClC,wDAAwD;AACxD,eAAe,EAAE,SAAS,MAAM,EAAE;AAClC,+DAA+D;AAC/D,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,uBAAuB;AAC7E,0CAA0C;AAC1C,oBAAoB,GAAE,MAAuC,GAC5D,iBAAiB,CAyFnB"}
@@ -2,7 +2,6 @@ import { ModulesDataAdapter } from '../adapters/types';
2
2
  import { ModulesView } from '../cache/keys';
3
3
  import { Module, ModuleItem, PageInfo } from '../types/domain';
4
4
  import { ItemsMode, ResolvedItemsMode } from './useItemsMode';
5
- /** Where a module's items came from. Mostly useful for tests and diagnostics. */
6
5
  export type ModuleItemsSource = 'inline' | 'onDemand';
7
6
  export interface ModuleItemsState {
8
7
  items: ModuleItem[];
@@ -16,11 +15,7 @@ export interface ModuleItemsState {
16
15
  }
17
16
  export interface UseModulesPageDataOptions {
18
17
  courseId: string;
19
- /**
20
- * Keep this referentially stable — build it once per host, not in render.
21
- * A new adapter identity every render rebuilds every item observer's options
22
- * every render. That does not refetch anything, but it is pure churn.
23
- */
18
+ /** Keep referentially stable: a new identity every render rebuilds every observer's options. */
24
19
  adapter: ModulesDataAdapter;
25
20
  view?: ModulesView;
26
21
  /** Defaults to `'auto'`. */
@@ -30,11 +25,7 @@ export interface UseModulesPageDataOptions {
30
25
  itemPageSize?: number;
31
26
  /** Max simultaneous per-module item requests. Defaults to 4. */
32
27
  itemConcurrency?: number;
33
- /**
34
- * How many collapsed modules keep their item query subscribed — and therefore
35
- * their pages pinned in the cache. Defaults to 20.
36
- * @see DEFAULT_RETAIN_COLLAPSED_LIMIT
37
- */
28
+ /** @see DEFAULT_RETAIN_COLLAPSED_LIMIT */
38
29
  retainCollapsedLimit?: number;
39
30
  staleTime?: number;
40
31
  initialExpandedModuleIds?: readonly string[];
@@ -44,7 +35,7 @@ export interface UseModulesPageDataResult {
44
35
  /** Frontier of the module list. `hasNextPage` is never hidden from the caller. */
45
36
  pageInfo: PageInfo;
46
37
  hasNextPage: boolean;
47
- /** One more page of modules. Explicit; nothing calls this for you. */
38
+ /** Explicit; nothing calls this for you. */
48
39
  fetchNextPage: () => void;
49
40
  isLoading: boolean;
50
41
  isFetchingNextPage: boolean;
@@ -57,22 +48,5 @@ export interface UseModulesPageDataResult {
57
48
  toggleModule: (moduleId: string) => void;
58
49
  expandedModuleIds: readonly string[];
59
50
  }
60
- /**
61
- * The one hook a modules page renders with.
62
- *
63
- * It owns three things the UI should not have to:
64
- *
65
- * 1. **Expansion state.** Which modules are open is UI state and is treated as
66
- * such — expanding or collapsing invalidates nothing. See
67
- * `cache/invalidate.ts` for why that sentence is the point of the package.
68
- * 2. **The items-mode decision.** `auto` probes page 1 without items and picks
69
- * inline or on-demand from what it sees. See `useItemsMode`.
70
- * 3. **Per-module item fetching**, gated by a shared `p-limit` so "expand
71
- * everything" is a trickle, and aborted on collapse so a response nobody
72
- * is waiting for never lands.
73
- *
74
- * Both levels of pagination stay explicit and both expose `hasNextPage`, so an
75
- * unfetched remainder is always visible rather than silently truncated.
76
- */
77
51
  export declare function useModulesPageData(options: UseModulesPageDataOptions): UseModulesPageDataResult;
78
52
  //# sourceMappingURL=useModulesPageData.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useModulesPageData.d.ts","sourceRoot":"","sources":["../../src/hooks/useModulesPageData.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAWnE,OAAO,EAAgB,KAAK,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAIrF,iFAAiF;AACjF,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,UAAU,CAAA;AAErD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,QAAQ,EAAE,QAAQ,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,SAAS,EAAE,OAAO,CAAA;IAClB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,MAAM,EAAE,iBAAiB,CAAA;CAC1B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAA;IAChB;;;;OAIG;IACH,OAAO,EAAE,kBAAkB,CAAA;IAC3B,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gEAAgE;IAChE,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wBAAwB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC7C;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,kFAAkF;IAClF,QAAQ,EAAE,QAAQ,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,sEAAsE;IACtE,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,SAAS,EAAE,OAAO,CAAA;IAClB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,8CAA8C;IAC9C,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACnC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,gBAAgB,CAAA;IAChD,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC;AAKD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,wBAAwB,CAsP/F"}
1
+ {"version":3,"file":"useModulesPageData.d.ts","sourceRoot":"","sources":["../../src/hooks/useModulesPageData.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAWnE,OAAO,EAAgB,KAAK,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAIrF,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,UAAU,CAAA;AAErD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,QAAQ,EAAE,QAAQ,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,SAAS,EAAE,OAAO,CAAA;IAClB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,MAAM,EAAE,iBAAiB,CAAA;CAC1B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAA;IAChB,gGAAgG;IAChG,OAAO,EAAE,kBAAkB,CAAA;IAC3B,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gEAAgE;IAChE,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,0CAA0C;IAC1C,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wBAAwB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC7C;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,kFAAkF;IAClF,QAAQ,EAAE,QAAQ,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,SAAS,EAAE,OAAO,CAAA;IAClB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,8CAA8C;IAC9C,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACnC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,gBAAgB,CAAA;IAChD,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC;AAKD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,wBAAwB,CA6N/F"}
package/dist/i18n.d.ts CHANGED
@@ -1,24 +1,17 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { default as en } from '../locales/en.json';
3
3
  /**
4
- * The i18n seam.
4
+ * The i18n seam. Named keys against the shipped `locales/en.json`, plural forms
5
+ * selected per locale. See `docs/adr/0003-i18n-named-keys.md` and `0004`.
5
6
  *
6
- * Named keys resolved against the shipped `locales/en.json`, with plural forms
7
- * selected per locale. See `docs/adr/0003-i18n-named-keys.md` and
8
- * `docs/adr/0004-i18n-plurals.md`.
7
+ * Two properties later work depends on: a missing key renders English rather than
8
+ * blank or throwing, and an unknown key passes through as its own text, which is
9
+ * how a host-registered registry label reaches the screen.
9
10
  *
10
- * Two properties later work depends on, so change them deliberately: a missing key
11
- * renders English rather than blank or throwing, and an unknown key passes through
12
- * as its own text, which is how a host-registered registry label reaches the screen
13
- * (`docs/adr/0001-customization.md`).
14
- *
15
- * `timezone` is deliberately absent: reading it means depending on `usePlatformUi()`,
16
- * which throws without a provider and would cost this package its render-anywhere
17
- * property. A host passing it alongside `locale` is the right shape, and the
18
- * formatting behind it is not built.
11
+ * `timezone` rides alongside `locale`; omitted renders in the viewer's own clock.
12
+ * `docs/adr/0006-host-supplied-timezone.md` has the reasoning.
19
13
  */
20
14
  export type ModulesTranslationKey = keyof typeof en;
21
- /** CLDR plural categories, keyed as `Intl.PluralRules` selects them. */
22
15
  export type PluralForms = Partial<Record<Intl.LDMLPluralRule, string>>;
23
16
  /**
24
17
  * A host may supply plural forms for any key, or collapse any key to one string.
@@ -36,27 +29,27 @@ export type ModulesTranslations = Record<ModulesTranslationKey, PluralForms | st
36
29
  export type TranslateFunction = (key: ModulesTranslationKey | (string & {}), options?: Record<string, unknown>) => string;
37
30
  export declare const DEFAULT_LOCALE = "en-US";
38
31
  export declare function createTranslate(translations?: Partial<ModulesTranslations>, locale?: string): TranslateFunction;
39
- /** Resolves from `locales/en.json` alone, in `en-US`. */
40
32
  export declare const defaultTranslate: TranslateFunction;
41
33
  export interface ModulesI18n {
42
34
  t: TranslateFunction;
43
- /** BCP 47 tag for `Intl` formatting. */
44
35
  locale: string;
36
+ /** IANA zone the dates render in. Omitted renders in the viewer's own clock. */
37
+ timezone?: string;
45
38
  }
46
39
  export interface ModulesI18nProviderProps {
47
40
  /** Partial; anything omitted falls back to `locales/en.json`. Memoize it. */
48
41
  translations?: Partial<ModulesTranslations>;
49
- /** Omit for `en-US`. */
50
42
  locale?: string;
43
+ /** IANA zone name, e.g. `America/Los_Angeles`. Omit to use the viewer's clock. */
44
+ timezone?: string;
51
45
  children: ReactNode;
52
46
  }
53
47
  /**
54
- * Supplies the host's catalog and locale.
48
+ * Supplies the host's catalog, locale and timezone.
55
49
  *
56
50
  * Optional — without it the package renders English, which is what makes the seam
57
51
  * adoptable incrementally.
58
52
  */
59
- export declare function ModulesI18nProvider({ translations, locale, children, }: ModulesI18nProviderProps): ReactNode;
60
- /** The translate function and locale, falling back to English. */
53
+ export declare function ModulesI18nProvider({ translations, locale, timezone, children, }: ModulesI18nProviderProps): ReactNode;
61
54
  export declare function useModulesI18n(): ModulesI18n;
62
55
  //# sourceMappingURL=i18n.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,EAAuB,MAAM,OAAO,CAAA;AAC1E,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAEnC;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,MAAM,qBAAqB,GAAG,MAAM,OAAO,EAAE,CAAA;AAEnD,wEAAwE;AACxE,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAA;AAEtE;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,qBAAqB,EAAE,WAAW,GAAG,MAAM,CAAC,CAAA;AAErF;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAC9B,GAAG,EAAE,qBAAqB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,EAC1C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,MAAM,CAAA;AAMX,eAAO,MAAM,cAAc,UAAU,CAAA;AA8ErC,wBAAgB,eAAe,CAC7B,YAAY,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,EAC3C,MAAM,GAAE,MAAuB,GAC9B,iBAAiB,CAEnB;AAED,yDAAyD;AACzD,eAAO,MAAM,gBAAgB,EAAE,iBAAqC,CAAA;AAEpE,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,iBAAiB,CAAA;IACpB,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAA;CACf;AAMD,MAAM,WAAW,wBAAwB;IACvC,6EAA6E;IAC7E,YAAY,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAC3C,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,YAAY,EACZ,MAAM,EACN,QAAQ,GACT,EAAE,wBAAwB,GAAG,SAAS,CAMtC;AAED,kEAAkE;AAClE,wBAAgB,cAAc,IAAI,WAAW,CAE5C"}
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,EAAuB,MAAM,OAAO,CAAA;AAC1E,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAEnC;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,qBAAqB,GAAG,MAAM,OAAO,EAAE,CAAA;AAEnD,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAA;AAEtE;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,qBAAqB,EAAE,WAAW,GAAG,MAAM,CAAC,CAAA;AAErF;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAC9B,GAAG,EAAE,qBAAqB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,EAC1C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,MAAM,CAAA;AAMX,eAAO,MAAM,cAAc,UAAU,CAAA;AA6ErC,wBAAgB,eAAe,CAC7B,YAAY,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,EAC3C,MAAM,GAAE,MAAuB,GAC9B,iBAAiB,CAEnB;AAED,eAAO,MAAM,gBAAgB,EAAE,iBAAqC,CAAA;AAEpE,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,iBAAiB,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAMD,MAAM,WAAW,wBAAwB;IACvC,6EAA6E;IAC7E,YAAY,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,QAAQ,GACT,EAAE,wBAAwB,GAAG,SAAS,CAMtC;AAED,wBAAgB,cAAc,IAAI,WAAW,CAE5C"}
package/dist/index.d.ts CHANGED
@@ -1,12 +1,5 @@
1
- /**
2
- * Public surface of @instructure/platform-modules.
3
- *
4
- * Hosts should need three things: a domain type, an adapter factory, and
5
- * `useModulesPageData`. Everything else is exported for testing, for hosts
6
- * that want finer control, or for the track that owns it.
7
- */
8
- export type { CompletionRequirement, CompletionRequirementType, Module, ModuleItem, ModuleItemNavigation, ModuleItemsPage, ModuleItemStatus, ModuleItemType, ModuleProgress, ModulesPage, ModuleStatus, PageInfo, } from './types';
9
- export { CompletionRequirementSchema, CompletionRequirementTypeSchema, ModuleItemSchema, ModuleItemsPageSchema, ModuleItemStatusSchema, ModuleItemTypeSchema, ModuleProgressSchema, ModuleSchema, ModulesPageSchema, ModuleStatusSchema, PageInfoSchema, } from './types';
1
+ export type { CompletionRequirement, CompletionRequirementType, Module, ModuleItem, ModuleItemNavigation, ModuleItemsPage, ModuleItemStatus, ModuleItemType, ModuleProgress, ModulesPage, ModuleStatus, PageInfo, PrerequisiteModule, } from './types';
2
+ export { CompletionRequirementSchema, CompletionRequirementTypeSchema, ModuleItemSchema, ModuleItemsPageSchema, ModuleItemStatusSchema, ModuleItemTypeSchema, ModuleProgressSchema, ModuleSchema, ModulesPageSchema, ModuleStatusSchema, PageInfoSchema, PrerequisiteModuleSchema, } from './types';
10
3
  export { EXT_CAREER_ESTIMATED_DURATION_MINUTES, getEstimatedDurationMinutes, withEstimatedDurationMinutes, } from './types';
11
4
  export type { ListModuleItemsArgs, ListModulesArgs, ModulesDataAdapter } from './adapters';
12
5
  export { createInMemoryAdapter, InMemoryCourseMismatchError, INLINE_ITEM_LIMIT, type InMemoryAdapterOptions, type InMemoryFixture, type InMemoryRequest, } from './adapters';
@@ -16,5 +9,5 @@ export { DEFAULT_INLINE_THRESHOLD, DEFAULT_ITEM_CONCURRENCY, DEFAULT_ITEM_PAGE_S
16
9
  export { invalidateCourse, invalidateModuleItems, invalidateModuleList, moduleItemsPrefix, type ModuleItemsKeyOptions, modulesKeys, modulesListPrefix, type ModulesListKeyOptions, type ModulesView, } from './cache';
17
10
  export { filterLabel, FilterChips, type FilterChipsProps, ModuleCard, type ModuleCardProps, ModuleItemRow, type ModuleItemRowProps, moduleItemStatusLabel, ModuleItemStatusPill, type ModuleItemStatusPillProps, ModuleNumberBadge, type ModuleNumberBadgeProps, MODULES_FILTER_IDS, type ModulesFilterId, ModulesList, type ModulesListProps, type ModulesRequestCounts, moduleStatusLabel, ModuleStatusPill, type ModuleStatusPillProps, } from './components';
18
11
  export { createTranslate, DEFAULT_LOCALE, defaultTranslate, type ModulesI18n, ModulesI18nProvider, type ModulesI18nProviderProps, type ModulesTranslationKey, type ModulesTranslations, type PluralForms, type TranslateFunction, useModulesI18n, } from './i18n';
19
- export { buildFixture, type BuildFixtureOptions, courseEmpty, courseFatModule, courseItemLinks, courseLarge, courseSmall, FIXTURE_COURSE_ID, type FixtureView, } from './fixtures';
12
+ export { buildFixture, type BuildFixtureOptions, courseEmpty, courseFatModule, courseItemLinks, courseLarge, courseLockReasons, courseSmall, FIXTURE_COURSE_ID, type FixtureView, } from './fixtures';
20
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}