@universityofmaryland/web-feeds-library 1.3.0-beta.0 → 1.3.0-beta.1
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.
- package/dist/academic.js +4 -4
- package/dist/academic.js.map +1 -1
- package/dist/events.js +10 -10
- package/dist/events.js.map +1 -1
- package/dist/experts.js +8 -8
- package/dist/experts.js.map +1 -1
- package/dist/factory/core/createBaseFeed.d.ts.map +1 -1
- package/dist/factory/core/createBaseFeed.js +19 -17
- package/dist/factory/core/createBaseFeed.js.map +1 -1
- package/dist/factory/core/types.d.ts +1 -0
- package/dist/factory/core/types.d.ts.map +1 -1
- package/dist/factory/helpers/displayHandler.js +29 -47
- package/dist/factory/helpers/displayHandler.js.map +1 -1
- package/dist/factory/helpers/feedHelpers.js +3 -3
- package/dist/factory/helpers/feedHelpers.js.map +1 -1
- package/dist/factory/helpers/fetchHandler.js +16 -33
- package/dist/factory/helpers/fetchHandler.js.map +1 -1
- package/dist/feeds/academic/index.d.ts +1 -1
- package/dist/feeds/academic/index.d.ts.map +1 -1
- package/dist/feeds/academic/slider.d.ts +1 -2
- package/dist/feeds/academic/slider.d.ts.map +1 -1
- package/dist/feeds/academic/slider.js +7 -6
- package/dist/feeds/academic/slider.js.map +1 -1
- package/dist/feeds/events/grid.d.ts +1 -2
- package/dist/feeds/events/grid.d.ts.map +1 -1
- package/dist/feeds/events/grid.js +22 -21
- package/dist/feeds/events/grid.js.map +1 -1
- package/dist/feeds/events/grouped.d.ts +1 -2
- package/dist/feeds/events/grouped.d.ts.map +1 -1
- package/dist/feeds/events/grouped.js +62 -78
- package/dist/feeds/events/grouped.js.map +1 -1
- package/dist/feeds/events/index.d.ts +4 -4
- package/dist/feeds/events/index.d.ts.map +1 -1
- package/dist/feeds/events/list.d.ts +1 -2
- package/dist/feeds/events/list.d.ts.map +1 -1
- package/dist/feeds/events/list.js +22 -21
- package/dist/feeds/events/list.js.map +1 -1
- package/dist/feeds/events/slider.d.ts +1 -2
- package/dist/feeds/events/slider.d.ts.map +1 -1
- package/dist/feeds/events/slider.js +7 -6
- package/dist/feeds/events/slider.js.map +1 -1
- package/dist/feeds/experts/_types.d.ts +2 -1
- package/dist/feeds/experts/_types.d.ts.map +1 -1
- package/dist/feeds/experts/bio.d.ts +1 -2
- package/dist/feeds/experts/bio.d.ts.map +1 -1
- package/dist/feeds/experts/bio.js +32 -31
- package/dist/feeds/experts/bio.js.map +1 -1
- package/dist/feeds/experts/grid.d.ts +1 -2
- package/dist/feeds/experts/grid.d.ts.map +1 -1
- package/dist/feeds/experts/grid.js +24 -23
- package/dist/feeds/experts/grid.js.map +1 -1
- package/dist/feeds/experts/index.d.ts +3 -3
- package/dist/feeds/experts/index.d.ts.map +1 -1
- package/dist/feeds/experts/list.d.ts +1 -2
- package/dist/feeds/experts/list.d.ts.map +1 -1
- package/dist/feeds/experts/list.js +23 -22
- package/dist/feeds/experts/list.js.map +1 -1
- package/dist/feeds/news/featured.d.ts +1 -2
- package/dist/feeds/news/featured.d.ts.map +1 -1
- package/dist/feeds/news/featured.js +56 -55
- package/dist/feeds/news/featured.js.map +1 -1
- package/dist/feeds/news/grid.d.ts +1 -2
- package/dist/feeds/news/grid.d.ts.map +1 -1
- package/dist/feeds/news/grid.js +24 -23
- package/dist/feeds/news/grid.js.map +1 -1
- package/dist/feeds/news/index.d.ts +3 -3
- package/dist/feeds/news/index.d.ts.map +1 -1
- package/dist/feeds/news/list.d.ts +1 -2
- package/dist/feeds/news/list.d.ts.map +1 -1
- package/dist/feeds/news/list.js +23 -22
- package/dist/feeds/news/list.js.map +1 -1
- package/dist/helpers/events/index.js +4 -4
- package/dist/helpers/events/index.js.map +1 -1
- package/dist/helpers/grouping/events.js +10 -10
- package/dist/helpers/grouping/events.js.map +1 -1
- package/dist/helpers/styles/shadow.js +5 -22
- package/dist/helpers/styles/shadow.js.map +1 -1
- package/dist/index.js +10 -10
- package/dist/index.js.map +1 -1
- package/dist/news.js +8 -8
- package/dist/news.js.map +1 -1
- package/dist/states/_types.d.ts +0 -24
- package/dist/states/_types.d.ts.map +1 -1
- package/dist/states/_types.js +3 -3
- package/dist/states/_types.js.map +1 -1
- package/dist/states/announcer.d.ts +1 -3
- package/dist/states/announcer.d.ts.map +1 -1
- package/dist/states/announcer.js +5 -5
- package/dist/states/announcer.js.map +1 -1
- package/dist/states/empty.d.ts +0 -2
- package/dist/states/empty.d.ts.map +1 -1
- package/dist/states/empty.js +15 -32
- package/dist/states/empty.js.map +1 -1
- package/dist/states/index.d.ts +4 -8
- package/dist/states/index.d.ts.map +1 -1
- package/dist/states/loading.d.ts +1 -3
- package/dist/states/loading.d.ts.map +1 -1
- package/dist/states/loading.js +16 -16
- package/dist/states/loading.js.map +1 -1
- package/dist/states/pagination.d.ts +1 -3
- package/dist/states/pagination.d.ts.map +1 -1
- package/dist/states/pagination.js +11 -28
- package/dist/states/pagination.js.map +1 -1
- package/dist/strategies/display/events.js +13 -13
- package/dist/strategies/display/events.js.map +1 -1
- package/dist/strategies/display/experts.js +23 -23
- package/dist/strategies/display/experts.js.map +1 -1
- package/dist/strategies/display/news.js +13 -13
- package/dist/strategies/display/news.js.map +1 -1
- package/dist/strategies/fetch/academic.js +3 -3
- package/dist/strategies/fetch/academic.js.map +1 -1
- package/dist/strategies/fetch/events.js +13 -13
- package/dist/strategies/fetch/events.js.map +1 -1
- package/dist/strategies/fetch/experts.d.ts +1 -1
- package/dist/strategies/fetch/experts.d.ts.map +1 -1
- package/dist/strategies/fetch/experts.js +13 -8
- package/dist/strategies/fetch/experts.js.map +1 -1
- package/dist/strategies/fetch/graphql.d.ts.map +1 -1
- package/dist/strategies/fetch/graphql.js +11 -7
- package/dist/strategies/fetch/graphql.js.map +1 -1
- package/dist/strategies/fetch/news.js +6 -6
- package/dist/strategies/fetch/news.js.map +1 -1
- package/dist/strategies/layout/grid.js +11 -11
- package/dist/strategies/layout/grid.js.map +1 -1
- package/dist/widgets/index.d.ts +1 -1
- package/dist/widgets/index.d.ts.map +1 -1
- package/dist/widgets/slider.d.ts +1 -2
- package/dist/widgets/slider.d.ts.map +1 -1
- package/dist/widgets/slider.js +19 -35
- package/dist/widgets/slider.js.map +1 -1
- package/package.json +15 -14
- package/dist/academic.mjs +0 -5
- package/dist/academic.mjs.map +0 -1
- package/dist/events.mjs +0 -11
- package/dist/events.mjs.map +0 -1
- package/dist/experts.mjs +0 -9
- package/dist/experts.mjs.map +0 -1
- package/dist/factory/core/createBaseFeed.mjs +0 -114
- package/dist/factory/core/createBaseFeed.mjs.map +0 -1
- package/dist/factory/helpers/displayHandler.mjs +0 -169
- package/dist/factory/helpers/displayHandler.mjs.map +0 -1
- package/dist/factory/helpers/feedHelpers.mjs +0 -32
- package/dist/factory/helpers/feedHelpers.mjs.map +0 -1
- package/dist/factory/helpers/fetchHandler.mjs +0 -123
- package/dist/factory/helpers/fetchHandler.mjs.map +0 -1
- package/dist/feeds/academic/slider.mjs +0 -11
- package/dist/feeds/academic/slider.mjs.map +0 -1
- package/dist/feeds/events/grid.mjs +0 -32
- package/dist/feeds/events/grid.mjs.map +0 -1
- package/dist/feeds/events/grouped.mjs +0 -337
- package/dist/feeds/events/grouped.mjs.map +0 -1
- package/dist/feeds/events/list.mjs +0 -33
- package/dist/feeds/events/list.mjs.map +0 -1
- package/dist/feeds/events/slider.mjs +0 -11
- package/dist/feeds/events/slider.mjs.map +0 -1
- package/dist/feeds/experts/bio.mjs +0 -147
- package/dist/feeds/experts/bio.mjs.map +0 -1
- package/dist/feeds/experts/grid.mjs +0 -37
- package/dist/feeds/experts/grid.mjs.map +0 -1
- package/dist/feeds/experts/list.mjs +0 -26
- package/dist/feeds/experts/list.mjs.map +0 -1
- package/dist/feeds/news/featured.mjs +0 -379
- package/dist/feeds/news/featured.mjs.map +0 -1
- package/dist/feeds/news/grid.mjs +0 -37
- package/dist/feeds/news/grid.mjs.map +0 -1
- package/dist/feeds/news/list.mjs +0 -34
- package/dist/feeds/news/list.mjs.map +0 -1
- package/dist/helpers/events/index.mjs +0 -21
- package/dist/helpers/events/index.mjs.map +0 -1
- package/dist/helpers/grouping/events.mjs +0 -147
- package/dist/helpers/grouping/events.mjs.map +0 -1
- package/dist/helpers/styles/shadow.mjs +0 -16
- package/dist/helpers/styles/shadow.mjs.map +0 -1
- package/dist/index.mjs +0 -11
- package/dist/index.mjs.map +0 -1
- package/dist/news.mjs +0 -9
- package/dist/news.mjs.map +0 -1
- package/dist/states/_types.mjs +0 -12
- package/dist/states/_types.mjs.map +0 -1
- package/dist/states/announcer.mjs +0 -62
- package/dist/states/announcer.mjs.map +0 -1
- package/dist/states/empty.mjs +0 -104
- package/dist/states/empty.mjs.map +0 -1
- package/dist/states/loading.mjs +0 -155
- package/dist/states/loading.mjs.map +0 -1
- package/dist/states/pagination.mjs +0 -102
- package/dist/states/pagination.mjs.map +0 -1
- package/dist/strategies/display/events.mjs +0 -60
- package/dist/strategies/display/events.mjs.map +0 -1
- package/dist/strategies/display/experts.mjs +0 -266
- package/dist/strategies/display/experts.mjs.map +0 -1
- package/dist/strategies/display/news.mjs +0 -58
- package/dist/strategies/display/news.mjs.map +0 -1
- package/dist/strategies/fetch/academic.mjs +0 -30
- package/dist/strategies/fetch/academic.mjs.map +0 -1
- package/dist/strategies/fetch/events.mjs +0 -223
- package/dist/strategies/fetch/events.mjs.map +0 -1
- package/dist/strategies/fetch/experts.mjs +0 -189
- package/dist/strategies/fetch/experts.mjs.map +0 -1
- package/dist/strategies/fetch/graphql.mjs +0 -100
- package/dist/strategies/fetch/graphql.mjs.map +0 -1
- package/dist/strategies/fetch/news.mjs +0 -95
- package/dist/strategies/fetch/news.mjs.map +0 -1
- package/dist/strategies/layout/grid.mjs +0 -36
- package/dist/strategies/layout/grid.mjs.map +0 -1
- package/dist/widgets/slider.mjs +0 -87
- package/dist/widgets/slider.mjs.map +0 -1
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { SliderProps } from './_types';
|
|
2
2
|
import { ElementModel } from '../../_types';
|
|
3
|
-
declare const
|
|
4
|
-
export default _default;
|
|
3
|
+
export declare const eventsSlider: (props: SliderProps) => ElementModel;
|
|
5
4
|
//# sourceMappingURL=slider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slider.d.ts","sourceRoot":"","sources":["../../../source/feeds/events/slider.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"slider.d.ts","sourceRoot":"","sources":["../../../source/feeds/events/slider.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAiBjD,eAAO,MAAM,YAAY,GAAI,OAAO,WAAW,KAAG,YAK9C,CAAC"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
const slider = (props) => slider$1({
|
|
1
|
+
import { createSliderWidget } from "../../widgets/slider.js";
|
|
2
|
+
import { EVENTS_SLIDER_QUERY } from "../../strategies/fetch/events.js";
|
|
3
|
+
const eventsSlider = (props) => createSliderWidget({
|
|
5
4
|
...props,
|
|
6
|
-
query:
|
|
5
|
+
query: EVENTS_SLIDER_QUERY,
|
|
7
6
|
url: "https://calendar.umd.edu/graphql"
|
|
8
7
|
});
|
|
9
|
-
|
|
8
|
+
export {
|
|
9
|
+
eventsSlider
|
|
10
|
+
};
|
|
10
11
|
//# sourceMappingURL=slider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slider.js","sources":["../../../source/feeds/events/slider.ts"],"sourcesContent":["/**\n * Events Slider Feed (Migrated)\n *\n * Displays events in a horizontal carousel layout.\n * Uses strategy pattern for GraphQL queries.\n *\n * @module composite/events/slider-new\n */\n\nimport { slider } from '../../widgets';\nimport { EVENTS_SLIDER_QUERY } from '../../strategies/fetch/events';\nimport { type SliderProps } from './_types';\nimport { type ElementModel } from '../../_types';\n\n/**\n * Creates an events slider feed\n *\n * @param props - Slider configuration options\n * @returns ElementModel with slider element and styles\n *\n * @example\n * ```typescript\n * const eventsSlider = slider({\n * token: 'your-token',\n * categories: 'sports,arts',\n * isThemeDark: false,\n * });\n * ```\n */\nexport
|
|
1
|
+
{"version":3,"file":"slider.js","sources":["../../../source/feeds/events/slider.ts"],"sourcesContent":["/**\n * Events Slider Feed (Migrated)\n *\n * Displays events in a horizontal carousel layout.\n * Uses strategy pattern for GraphQL queries.\n *\n * @module composite/events/slider-new\n */\n\nimport { slider } from '../../widgets';\nimport { EVENTS_SLIDER_QUERY } from '../../strategies/fetch/events';\nimport { type SliderProps } from './_types';\nimport { type ElementModel } from '../../_types';\n\n/**\n * Creates an events slider feed\n *\n * @param props - Slider configuration options\n * @returns ElementModel with slider element and styles\n *\n * @example\n * ```typescript\n * const eventsSlider = slider({\n * token: 'your-token',\n * categories: 'sports,arts',\n * isThemeDark: false,\n * });\n * ```\n */\nexport const eventsSlider = (props: SliderProps): ElementModel =>\n slider({\n ...props,\n query: EVENTS_SLIDER_QUERY,\n url: 'https://calendar.umd.edu/graphql',\n });\n"],"names":["slider"],"mappings":";;AA6BO,MAAM,eAAe,CAAC,UAC3BA,mBAAO;AAAA,EACL,GAAG;AAAA,EACH,OAAO;AAAA,EACP,KAAK;AACP,CAAC;"}
|
|
@@ -3,6 +3,7 @@ export interface BaseProps {
|
|
|
3
3
|
numberOfRowsToStart: number;
|
|
4
4
|
categories?: string[];
|
|
5
5
|
isThemeDark?: boolean;
|
|
6
|
+
isMediaTrained?: boolean;
|
|
6
7
|
isLazyLoad: boolean;
|
|
7
8
|
entriesToRemove?: string[];
|
|
8
9
|
styleCallback?: (cssString: string) => void;
|
|
@@ -16,7 +17,7 @@ export interface GridProps extends BaseProps {
|
|
|
16
17
|
export interface ListProps extends BaseProps {
|
|
17
18
|
cardType?: 'list' | 'tabular';
|
|
18
19
|
}
|
|
19
|
-
export interface BioProps extends Omit<BaseProps, 'numberOfRowsToStart' | 'isLazyLoad' | 'categories' | 'entriesToRemove'> {
|
|
20
|
+
export interface BioProps extends Omit<BaseProps, 'numberOfRowsToStart' | 'isLazyLoad' | 'categories' | 'entriesToRemove' | 'isMediaTrained'> {
|
|
20
21
|
expertId: string;
|
|
21
22
|
}
|
|
22
23
|
//# sourceMappingURL=_types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_types.d.ts","sourceRoot":"","sources":["../../../source/feeds/experts/_types.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,SAAS;IAExB,KAAK,EAAE,MAAM,CAAC;IAEd,mBAAmB,EAAE,MAAM,CAAC;IAE5B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,UAAU,EAAE,OAAO,CAAC;IAEpB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAOD,MAAM,WAAW,SAAU,SAAQ,SAAS;IAE1C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;CACzC;AAOD,MAAM,WAAW,SAAU,SAAQ,SAAS;IAE1C,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAOD,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"_types.d.ts","sourceRoot":"","sources":["../../../source/feeds/experts/_types.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,SAAS;IAExB,KAAK,EAAE,MAAM,CAAC;IAEd,mBAAmB,EAAE,MAAM,CAAC;IAE5B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,UAAU,EAAE,OAAO,CAAC;IAEpB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAOD,MAAM,WAAW,SAAU,SAAQ,SAAS;IAE1C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;CACzC;AAOD,MAAM,WAAW,SAAU,SAAQ,SAAS;IAE1C,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAOD,MAAM,WAAW,QACf,SAAQ,IAAI,CACV,SAAS,EACP,qBAAqB,GACrB,YAAY,GACZ,YAAY,GACZ,iBAAiB,GACjB,gBAAgB,CACnB;IAED,QAAQ,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { BioProps } from './_types';
|
|
2
2
|
import { ElementModel } from '../../_types';
|
|
3
|
-
declare const
|
|
4
|
-
export default _default;
|
|
3
|
+
export declare const expertsBio: (props: BioProps) => ElementModel;
|
|
5
4
|
//# sourceMappingURL=bio.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bio.d.ts","sourceRoot":"","sources":["../../../source/feeds/experts/bio.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"bio.d.ts","sourceRoot":"","sources":["../../../source/feeds/experts/bio.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AA8MjD,eAAO,MAAM,UAAU,GAAI,OAAO,QAAQ,KAAG,YAuD5C,CAAC"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const shadow = require("../../helpers/styles/shadow.js");
|
|
1
|
+
import { ElementBuilder } from "@universityofmaryland/web-builder-library";
|
|
2
|
+
import { person } from "@universityofmaryland/web-elements-library/composite";
|
|
3
|
+
import { LoadingState } from "../../states/loading.js";
|
|
4
|
+
import "@universityofmaryland/web-elements-library";
|
|
5
|
+
import "@universityofmaryland/web-styles-library";
|
|
6
|
+
import "@universityofmaryland/web-utilities-library/theme";
|
|
7
|
+
import { Announcer } from "../../states/announcer.js";
|
|
8
|
+
import { expertsFetchStrategy } from "../../strategies/fetch/experts.js";
|
|
9
|
+
import { mapExpertToBioProps, buildFullName } from "../../strategies/display/experts.js";
|
|
10
|
+
import { setShadowStyles } from "../../helpers/styles/shadow.js";
|
|
12
11
|
const createFetchProps = (token, expertId) => ({
|
|
13
12
|
token,
|
|
14
13
|
limit: 1,
|
|
@@ -16,9 +15,9 @@ const createFetchProps = (token, expertId) => ({
|
|
|
16
15
|
id: expertId
|
|
17
16
|
});
|
|
18
17
|
const createSuccessAnnouncer = (expert) => {
|
|
19
|
-
const fullName =
|
|
18
|
+
const fullName = buildFullName(expert);
|
|
20
19
|
const message = `Loaded profile for ${fullName}`;
|
|
21
|
-
return new
|
|
20
|
+
return new Announcer({ message });
|
|
22
21
|
};
|
|
23
22
|
class BioFeedState {
|
|
24
23
|
/**
|
|
@@ -44,8 +43,8 @@ class BioFeedState {
|
|
|
44
43
|
*
|
|
45
44
|
* @param shadow - Shadow root element
|
|
46
45
|
*/
|
|
47
|
-
setShadowRoot(
|
|
48
|
-
this.shadowRoot =
|
|
46
|
+
setShadowRoot(shadow) {
|
|
47
|
+
this.shadowRoot = shadow;
|
|
49
48
|
}
|
|
50
49
|
/**
|
|
51
50
|
* Update shadow DOM styles
|
|
@@ -54,7 +53,7 @@ class BioFeedState {
|
|
|
54
53
|
*/
|
|
55
54
|
async updateShadowStyles() {
|
|
56
55
|
if (!this.shadowRoot) return;
|
|
57
|
-
await
|
|
56
|
+
await setShadowStyles({
|
|
58
57
|
shadowRoot: this.shadowRoot,
|
|
59
58
|
styles: this.getStyles()
|
|
60
59
|
});
|
|
@@ -73,14 +72,14 @@ class BioFeedState {
|
|
|
73
72
|
* @returns Callback function for shadow root
|
|
74
73
|
*/
|
|
75
74
|
getShadowCallback() {
|
|
76
|
-
return (
|
|
75
|
+
return (shadow) => this.setShadowRoot(shadow);
|
|
77
76
|
}
|
|
78
77
|
}
|
|
79
78
|
const renderSuccess = async (container, expert, state, isThemeDark) => {
|
|
80
|
-
const bioProps =
|
|
81
|
-
const bioElement =
|
|
82
|
-
const
|
|
83
|
-
const children = [bioElement.element,
|
|
79
|
+
const bioProps = mapExpertToBioProps(expert, "small", isThemeDark);
|
|
80
|
+
const bioElement = person.bio.small(bioProps);
|
|
81
|
+
const announcer = createSuccessAnnouncer(expert);
|
|
82
|
+
const children = [bioElement.element, announcer.getElement()];
|
|
84
83
|
children.forEach((child) => container.appendChild(child));
|
|
85
84
|
state.addStyles(bioElement.styles);
|
|
86
85
|
await state.updateShadowStyles();
|
|
@@ -105,28 +104,28 @@ const logError = (errorType, expertId, error) => {
|
|
|
105
104
|
break;
|
|
106
105
|
}
|
|
107
106
|
};
|
|
108
|
-
const
|
|
107
|
+
const expertsBio = (props) => {
|
|
109
108
|
const { token, expertId, isThemeDark = false } = props;
|
|
110
|
-
const containerBuilder = new
|
|
109
|
+
const containerBuilder = new ElementBuilder("div").withClassName(
|
|
111
110
|
"expert-bio-feed"
|
|
112
111
|
);
|
|
113
112
|
const container = containerBuilder.getElement();
|
|
114
|
-
const loading
|
|
115
|
-
const state = new BioFeedState(loading
|
|
113
|
+
const loading = new LoadingState({ isThemeDark });
|
|
114
|
+
const state = new BioFeedState(loading.styles);
|
|
116
115
|
const initialize = async () => {
|
|
117
|
-
loading
|
|
116
|
+
loading.show(container);
|
|
118
117
|
try {
|
|
119
118
|
const fetchProps = createFetchProps(token, expertId);
|
|
120
|
-
const variables =
|
|
121
|
-
const entries = await
|
|
122
|
-
loading
|
|
119
|
+
const variables = expertsFetchStrategy.composeApiVariables(fetchProps);
|
|
120
|
+
const entries = await expertsFetchStrategy.fetchEntries(variables);
|
|
121
|
+
loading.hide();
|
|
123
122
|
if (!entries || entries.length === 0) {
|
|
124
123
|
logError("not_found", expertId);
|
|
125
124
|
return;
|
|
126
125
|
}
|
|
127
126
|
await renderSuccess(container, entries[0], state, isThemeDark);
|
|
128
127
|
} catch (error) {
|
|
129
|
-
loading
|
|
128
|
+
loading.hide();
|
|
130
129
|
logError("graphql_error", expertId, error);
|
|
131
130
|
}
|
|
132
131
|
};
|
|
@@ -142,5 +141,7 @@ const bio = (props) => {
|
|
|
142
141
|
}
|
|
143
142
|
};
|
|
144
143
|
};
|
|
145
|
-
|
|
144
|
+
export {
|
|
145
|
+
expertsBio
|
|
146
|
+
};
|
|
146
147
|
//# sourceMappingURL=bio.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bio.js","sources":["../../../source/feeds/experts/bio.ts"],"sourcesContent":["/**\n * Expert Bio Feed (Refactored with Element Builder)\n *\n * Displays a single expert's profile with summary.\n * Uses element builder pattern for clean, declarative construction.\n *\n * @module feeds/experts/bio\n */\n\nimport { ElementBuilder } from '@universityofmaryland/web-builder-library';\nimport { person } from '@universityofmaryland/web-elements-library/composite';\nimport { LoadingState, Announcer } from '../../states';\nimport { expertsFetchStrategy } from '../../strategies/fetch/experts';\nimport {\n mapExpertToBioProps,\n buildFullName,\n} from '../../strategies/display/experts';\nimport { styles as styleUtilities } from '../../helpers';\nimport { type ExpertEntry } from 'types/data';\nimport { type BioProps } from './_types';\nimport { type ElementModel } from '../../_types';\n\n// ============================================================================\n// PURE HELPER FUNCTIONS\n// ============================================================================\n\n/**\n * Create base props for fetch strategy\n *\n * @param token - API authentication token\n * @param expertId - Expert ID to fetch\n * @returns Base props object for strategy's composeApiVariables\n */\nconst createFetchProps = (token: string, expertId: string) => ({\n token,\n limit: 1,\n offset: 0,\n id: expertId,\n});\n\n/**\n * Create accessibility announcer for loaded expert\n *\n * @param expert - Expert entry\n * @returns Announcer element model\n */\nconst createSuccessAnnouncer = (expert: ExpertEntry): Announcer => {\n const fullName = buildFullName(expert);\n const message = `Loaded profile for ${fullName}`;\n return new Announcer({ message });\n};\n\n// ============================================================================\n// STATE MANAGER CLASS\n// ============================================================================\n\n/**\n * Manages bio feed state and shadow DOM synchronization\n *\n * Encapsulates style accumulation and shadow DOM updates.\n * Provides immutable-style API for adding styles.\n */\nclass BioFeedState {\n private stylesArray: string[] = [];\n private shadowRoot: ShadowRoot | null = null;\n\n /**\n * Initialize state with initial styles\n *\n * @param initialStyles - Initial CSS styles\n */\n constructor(initialStyles: string) {\n this.stylesArray.push(initialStyles);\n }\n\n /**\n * Add styles to the accumulated styles\n *\n * @param styles - CSS styles to add\n */\n addStyles(styles: string): void {\n this.stylesArray.push(styles);\n }\n\n /**\n * Set shadow root reference for style updates\n *\n * @param shadow - Shadow root element\n */\n setShadowRoot(shadow: ShadowRoot): void {\n this.shadowRoot = shadow;\n }\n\n /**\n * Update shadow DOM styles\n *\n * @returns Promise that resolves when styles are updated\n */\n async updateShadowStyles(): Promise<void> {\n if (!this.shadowRoot) return;\n await styleUtilities.setShadowStyles({\n shadowRoot: this.shadowRoot,\n styles: this.getStyles(),\n });\n }\n\n /**\n * Get accumulated styles as single string\n *\n * @returns Combined CSS styles\n */\n getStyles(): string {\n return this.stylesArray.join('\\n');\n }\n\n /**\n * Get shadow root callback for events\n *\n * @returns Callback function for shadow root\n */\n getShadowCallback(): (shadow: ShadowRoot) => void {\n return (shadow) => this.setShadowRoot(shadow);\n }\n}\n\n// ============================================================================\n// RENDERING FUNCTIONS\n// ============================================================================\n\n/**\n * Render successful bio with expert data\n *\n * @param container - Container element to render into\n * @param expert - Expert entry data\n * @param state - State manager instance\n * @param isThemeDark - Dark theme flag\n * @returns Promise that resolves when rendering is complete\n */\nconst renderSuccess = async (\n container: HTMLElement,\n expert: ExpertEntry,\n state: BioFeedState,\n isThemeDark: boolean,\n): Promise<void> => {\n const bioProps = mapExpertToBioProps(expert, 'small', isThemeDark);\n const bioElement = person.bio.small(bioProps);\n const announcer = createSuccessAnnouncer(expert);\n const children = [bioElement.element, announcer.getElement()];\n\n children.forEach((child) => container.appendChild(child));\n\n state.addStyles(bioElement.styles);\n await state.updateShadowStyles();\n};\n\n/**\n * Error types for expert bio feed\n */\ntype BioErrorType = 'not_found' | 'graphql_error' | 'invalid_request';\n\n/**\n * Log error to console with specific warning message\n *\n * @param errorType - Type of error that occurred\n * @param expertId - Expert ID that was requested\n * @param error - Optional error object for GraphQL errors\n */\nconst logError = (\n errorType: BioErrorType,\n expertId: string,\n error?: any,\n): void => {\n switch (errorType) {\n case 'not_found':\n console.warn(\n `[Expert Bio Feed] No expert found with ID \"${expertId}\". ` +\n `Please verify the expert ID is correct and the expert exists in the system.`,\n );\n break;\n case 'graphql_error':\n console.warn(\n `[Expert Bio Feed] GraphQL error occurred while fetching expert \"${expertId}\". ` +\n `Check network connection and API availability.`,\n error,\n );\n break;\n case 'invalid_request':\n console.warn(\n `[Expert Bio Feed] Invalid request for expert \"${expertId}\". ` +\n `Ensure both data-token and data-id attributes are provided.`,\n );\n break;\n }\n};\n\n// ============================================================================\n// MAIN EXPORT\n// ============================================================================\n\n/**\n * Create an expert bio feed\n *\n * Fetches and displays a single expert's bio with summary.\n * Uses element builder pattern for clean construction.\n *\n * @param props - Feed configuration\n * @returns ElementModel with bio element, styles, and events\n *\n * @example\n * ```typescript\n * const bio = expertBio({\n * token: 'my-token',\n * expertId: 'john-doe',\n * });\n * ```\n *\n * @example\n * ```typescript\n * // With dark theme\n * const bio = expertBio({\n * token: 'my-token',\n * expertId: 'jane-smith',\n * isThemeDark: true,\n * });\n * ```\n */\nexport default (props: BioProps): ElementModel => {\n const { token, expertId, isThemeDark = false } = props;\n\n // Create container using ElementBuilder\n const containerBuilder = new ElementBuilder('div').withClassName(\n 'expert-bio-feed',\n );\n\n // Get element for manipulation (non-destructive)\n const container = containerBuilder.getElement();\n\n // Initialize state management\n const loading = new LoadingState({ isThemeDark });\n const state = new BioFeedState(loading.styles);\n\n /**\n * Fetch expert data and render\n */\n const initialize = async (): Promise<void> => {\n loading.show(container);\n\n try {\n const fetchProps = createFetchProps(token, expertId);\n const variables = expertsFetchStrategy.composeApiVariables(fetchProps);\n const entries = await expertsFetchStrategy.fetchEntries(variables);\n\n loading.hide();\n\n if (!entries || entries.length === 0) {\n logError('not_found', expertId);\n return;\n }\n\n await renderSuccess(container, entries[0], state, isThemeDark);\n } catch (error) {\n loading.hide();\n logError('graphql_error', expertId, error);\n }\n };\n\n // Start initialization\n initialize();\n\n // Build and return element model\n const model = containerBuilder.build();\n\n return {\n element: model.element,\n get styles() {\n return state.getStyles();\n },\n events: {\n callback: state.getShadowCallback(),\n },\n };\n};\n"],"names":["buildFullName","Announcer","shadow","styleUtilities.setShadowStyles","mapExpertToBioProps","person","announcer","ElementBuilder","loading","LoadingState","expertsFetchStrategy"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bio.js","sources":["../../../source/feeds/experts/bio.ts"],"sourcesContent":["/**\n * Expert Bio Feed (Refactored with Element Builder)\n *\n * Displays a single expert's profile with summary.\n * Uses element builder pattern for clean, declarative construction.\n *\n * @module feeds/experts/bio\n */\n\nimport { ElementBuilder } from '@universityofmaryland/web-builder-library';\nimport { person } from '@universityofmaryland/web-elements-library/composite';\nimport { LoadingState, Announcer } from '../../states';\nimport { expertsFetchStrategy } from '../../strategies/fetch/experts';\nimport {\n mapExpertToBioProps,\n buildFullName,\n} from '../../strategies/display/experts';\nimport { styles as styleUtilities } from '../../helpers';\nimport { type ExpertEntry } from 'types/data';\nimport { type BioProps } from './_types';\nimport { type ElementModel } from '../../_types';\n\n// ============================================================================\n// PURE HELPER FUNCTIONS\n// ============================================================================\n\n/**\n * Create base props for fetch strategy\n *\n * @param token - API authentication token\n * @param expertId - Expert ID to fetch\n * @returns Base props object for strategy's composeApiVariables\n */\nconst createFetchProps = (token: string, expertId: string) => ({\n token,\n limit: 1,\n offset: 0,\n id: expertId,\n});\n\n/**\n * Create accessibility announcer for loaded expert\n *\n * @param expert - Expert entry\n * @returns Announcer element model\n */\nconst createSuccessAnnouncer = (expert: ExpertEntry): Announcer => {\n const fullName = buildFullName(expert);\n const message = `Loaded profile for ${fullName}`;\n return new Announcer({ message });\n};\n\n// ============================================================================\n// STATE MANAGER CLASS\n// ============================================================================\n\n/**\n * Manages bio feed state and shadow DOM synchronization\n *\n * Encapsulates style accumulation and shadow DOM updates.\n * Provides immutable-style API for adding styles.\n */\nclass BioFeedState {\n private stylesArray: string[] = [];\n private shadowRoot: ShadowRoot | null = null;\n\n /**\n * Initialize state with initial styles\n *\n * @param initialStyles - Initial CSS styles\n */\n constructor(initialStyles: string) {\n this.stylesArray.push(initialStyles);\n }\n\n /**\n * Add styles to the accumulated styles\n *\n * @param styles - CSS styles to add\n */\n addStyles(styles: string): void {\n this.stylesArray.push(styles);\n }\n\n /**\n * Set shadow root reference for style updates\n *\n * @param shadow - Shadow root element\n */\n setShadowRoot(shadow: ShadowRoot): void {\n this.shadowRoot = shadow;\n }\n\n /**\n * Update shadow DOM styles\n *\n * @returns Promise that resolves when styles are updated\n */\n async updateShadowStyles(): Promise<void> {\n if (!this.shadowRoot) return;\n await styleUtilities.setShadowStyles({\n shadowRoot: this.shadowRoot,\n styles: this.getStyles(),\n });\n }\n\n /**\n * Get accumulated styles as single string\n *\n * @returns Combined CSS styles\n */\n getStyles(): string {\n return this.stylesArray.join('\\n');\n }\n\n /**\n * Get shadow root callback for events\n *\n * @returns Callback function for shadow root\n */\n getShadowCallback(): (shadow: ShadowRoot) => void {\n return (shadow) => this.setShadowRoot(shadow);\n }\n}\n\n// ============================================================================\n// RENDERING FUNCTIONS\n// ============================================================================\n\n/**\n * Render successful bio with expert data\n *\n * @param container - Container element to render into\n * @param expert - Expert entry data\n * @param state - State manager instance\n * @param isThemeDark - Dark theme flag\n * @returns Promise that resolves when rendering is complete\n */\nconst renderSuccess = async (\n container: HTMLElement,\n expert: ExpertEntry,\n state: BioFeedState,\n isThemeDark: boolean,\n): Promise<void> => {\n const bioProps = mapExpertToBioProps(expert, 'small', isThemeDark);\n const bioElement = person.bio.small(bioProps);\n const announcer = createSuccessAnnouncer(expert);\n const children = [bioElement.element, announcer.getElement()];\n\n children.forEach((child) => container.appendChild(child));\n\n state.addStyles(bioElement.styles);\n await state.updateShadowStyles();\n};\n\n/**\n * Error types for expert bio feed\n */\ntype BioErrorType = 'not_found' | 'graphql_error' | 'invalid_request';\n\n/**\n * Log error to console with specific warning message\n *\n * @param errorType - Type of error that occurred\n * @param expertId - Expert ID that was requested\n * @param error - Optional error object for GraphQL errors\n */\nconst logError = (\n errorType: BioErrorType,\n expertId: string,\n error?: any,\n): void => {\n switch (errorType) {\n case 'not_found':\n console.warn(\n `[Expert Bio Feed] No expert found with ID \"${expertId}\". ` +\n `Please verify the expert ID is correct and the expert exists in the system.`,\n );\n break;\n case 'graphql_error':\n console.warn(\n `[Expert Bio Feed] GraphQL error occurred while fetching expert \"${expertId}\". ` +\n `Check network connection and API availability.`,\n error,\n );\n break;\n case 'invalid_request':\n console.warn(\n `[Expert Bio Feed] Invalid request for expert \"${expertId}\". ` +\n `Ensure both data-token and data-id attributes are provided.`,\n );\n break;\n }\n};\n\n// ============================================================================\n// MAIN EXPORT\n// ============================================================================\n\n/**\n * Create an expert bio feed\n *\n * Fetches and displays a single expert's bio with summary.\n * Uses element builder pattern for clean construction.\n *\n * @param props - Feed configuration\n * @returns ElementModel with bio element, styles, and events\n *\n * @example\n * ```typescript\n * const bio = expertBio({\n * token: 'my-token',\n * expertId: 'john-doe',\n * });\n * ```\n *\n * @example\n * ```typescript\n * // With dark theme\n * const bio = expertBio({\n * token: 'my-token',\n * expertId: 'jane-smith',\n * isThemeDark: true,\n * });\n * ```\n */\nexport const expertsBio = (props: BioProps): ElementModel => {\n const { token, expertId, isThemeDark = false } = props;\n\n // Create container using ElementBuilder\n const containerBuilder = new ElementBuilder('div').withClassName(\n 'expert-bio-feed',\n );\n\n // Get element for manipulation (non-destructive)\n const container = containerBuilder.getElement();\n\n // Initialize state management\n const loading = new LoadingState({ isThemeDark });\n const state = new BioFeedState(loading.styles);\n\n /**\n * Fetch expert data and render\n */\n const initialize = async (): Promise<void> => {\n loading.show(container);\n\n try {\n const fetchProps = createFetchProps(token, expertId);\n const variables = expertsFetchStrategy.composeApiVariables(fetchProps);\n const entries = await expertsFetchStrategy.fetchEntries(variables);\n\n loading.hide();\n\n if (!entries || entries.length === 0) {\n logError('not_found', expertId);\n return;\n }\n\n await renderSuccess(container, entries[0], state, isThemeDark);\n } catch (error) {\n loading.hide();\n logError('graphql_error', expertId, error);\n }\n };\n\n // Start initialization\n initialize();\n\n // Build and return element model\n const model = containerBuilder.build();\n\n return {\n element: model.element,\n get styles() {\n return state.getStyles();\n },\n events: {\n callback: state.getShadowCallback(),\n },\n };\n};\n"],"names":["styleUtilities.setShadowStyles"],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { GridProps } from './_types';
|
|
2
2
|
import { ElementModel } from '../../_types';
|
|
3
|
-
declare const
|
|
4
|
-
export default _default;
|
|
3
|
+
export declare const expertsGrid: (props: GridProps) => ElementModel;
|
|
5
4
|
//# sourceMappingURL=grid.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../../../source/feeds/experts/grid.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../../../source/feeds/experts/grid.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AA8BjD,eAAO,MAAM,WAAW,GAAI,OAAO,SAAS,KAAG,YAmB9C,CAAC"}
|
|
@@ -1,29 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const grid = (props) => {
|
|
1
|
+
import { createBaseFeed } from "../../factory/core/createBaseFeed.js";
|
|
2
|
+
import "@universityofmaryland/web-builder-library";
|
|
3
|
+
import "@universityofmaryland/web-styles-library";
|
|
4
|
+
import "@universityofmaryland/web-styles-library/typography";
|
|
5
|
+
import "@universityofmaryland/web-utilities-library/theme";
|
|
6
|
+
import "@universityofmaryland/web-elements-library";
|
|
7
|
+
import "@universityofmaryland/web-elements-library/composite";
|
|
8
|
+
import "@universityofmaryland/web-elements-library/atomic";
|
|
9
|
+
import "@universityofmaryland/web-utilities-library/elements";
|
|
10
|
+
import { expertsDisplayStrategy } from "../../strategies/display/experts.js";
|
|
11
|
+
import "@universityofmaryland/web-utilities-library/network";
|
|
12
|
+
import "../../strategies/fetch/events.js";
|
|
13
|
+
import "../../strategies/fetch/news.js";
|
|
14
|
+
import { expertsFetchStrategy } from "../../strategies/fetch/experts.js";
|
|
15
|
+
import { gridLayout, gridBorderLayout } from "../../strategies/layout/grid.js";
|
|
16
|
+
import "@universityofmaryland/web-elements-library/layout";
|
|
17
|
+
const expertsGrid = (props) => {
|
|
19
18
|
const { isOverlay = false } = props;
|
|
20
|
-
return createBaseFeed
|
|
19
|
+
return createBaseFeed({
|
|
21
20
|
...props,
|
|
22
21
|
isOverlay,
|
|
23
22
|
isAligned: !isOverlay,
|
|
24
|
-
fetchStrategy:
|
|
25
|
-
displayStrategy:
|
|
26
|
-
layoutStrategy: isOverlay ?
|
|
23
|
+
fetchStrategy: expertsFetchStrategy,
|
|
24
|
+
displayStrategy: expertsDisplayStrategy,
|
|
25
|
+
layoutStrategy: isOverlay ? gridLayout : gridBorderLayout,
|
|
27
26
|
imageConfig: (entry) => ({
|
|
28
27
|
imageUrl: entry.headshot?.[0]?.url || "",
|
|
29
28
|
altText: entry.middleName ? `${entry.firstName} ${entry.middleName} ${entry.lastName}` : `${entry.firstName} ${entry.lastName}`,
|
|
@@ -32,5 +31,7 @@ const grid = (props) => {
|
|
|
32
31
|
})
|
|
33
32
|
});
|
|
34
33
|
};
|
|
35
|
-
|
|
34
|
+
export {
|
|
35
|
+
expertsGrid
|
|
36
|
+
};
|
|
36
37
|
//# sourceMappingURL=grid.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid.js","sources":["../../../source/feeds/experts/grid.ts"],"sourcesContent":["/**\n * Experts Grid Feed (Factory Pattern)\n *\n * Grid layout for expert profile entries using the feed factory pattern.\n * Uses person elements for displaying expert profiles in a multi-column grid.\n * Supports overlay cards with gridLayout or standard cards with gridGapLayout.\n *\n * @module feeds/experts/grid\n */\n\nimport { createBaseFeed } from 'factory';\nimport {\n expertsFetchStrategy,\n expertsDisplayStrategy,\n gridLayout,\n gridBorderLayout,\n} from 'strategies';\nimport { type GridProps } from './_types';\nimport { type ElementModel } from '../../_types';\n\n/**\n * Create an experts grid feed\n *\n * @param props - Feed configuration\n * @returns ElementModel with feed element and styles\n *\n * @example\n * ```typescript\n * // Standard grid with borders\n * const feed = expertsGrid({\n * token: 'my-token',\n * numberOfColumnsToShow: 3,\n * numberOfRowsToStart: 2,\n * isLazyLoad: true,\n * categories: ['computer-science', 'engineering'],\n * });\n *\n * // Overlay grid\n * const overlayFeed = expertsGrid({\n * token: 'my-token',\n * numberOfColumnsToShow: 4,\n * numberOfRowsToStart: 2,\n * isOverlay: true,\n * });\n *\n * document.body.appendChild(feed.element);\n * ```\n */\nexport
|
|
1
|
+
{"version":3,"file":"grid.js","sources":["../../../source/feeds/experts/grid.ts"],"sourcesContent":["/**\n * Experts Grid Feed (Factory Pattern)\n *\n * Grid layout for expert profile entries using the feed factory pattern.\n * Uses person elements for displaying expert profiles in a multi-column grid.\n * Supports overlay cards with gridLayout or standard cards with gridGapLayout.\n *\n * @module feeds/experts/grid\n */\n\nimport { createBaseFeed } from 'factory';\nimport {\n expertsFetchStrategy,\n expertsDisplayStrategy,\n gridLayout,\n gridBorderLayout,\n} from 'strategies';\nimport { type GridProps } from './_types';\nimport { type ElementModel } from '../../_types';\n\n/**\n * Create an experts grid feed\n *\n * @param props - Feed configuration\n * @returns ElementModel with feed element and styles\n *\n * @example\n * ```typescript\n * // Standard grid with borders\n * const feed = expertsGrid({\n * token: 'my-token',\n * numberOfColumnsToShow: 3,\n * numberOfRowsToStart: 2,\n * isLazyLoad: true,\n * categories: ['computer-science', 'engineering'],\n * });\n *\n * // Overlay grid\n * const overlayFeed = expertsGrid({\n * token: 'my-token',\n * numberOfColumnsToShow: 4,\n * numberOfRowsToStart: 2,\n * isOverlay: true,\n * });\n *\n * document.body.appendChild(feed.element);\n * ```\n */\nexport const expertsGrid = (props: GridProps): ElementModel => {\n const { isOverlay = false } = props;\n\n return createBaseFeed({\n ...props,\n isOverlay,\n isAligned: !isOverlay,\n fetchStrategy: expertsFetchStrategy,\n displayStrategy: expertsDisplayStrategy,\n layoutStrategy: isOverlay ? gridLayout : gridBorderLayout,\n imageConfig: (entry) => ({\n imageUrl: entry.headshot?.[0]?.url || '',\n altText: entry.middleName\n ? `${entry.firstName} ${entry.middleName} ${entry.lastName}`\n : `${entry.firstName} ${entry.lastName}`,\n linkUrl: `https://umdrightnow.umd.edu/expert/${entry.slug}`,\n linkLabel: `View profile for ${entry.firstName} ${entry.lastName}`,\n }),\n });\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAgDO,MAAM,cAAc,CAAC,UAAmC;AAC7D,QAAM,EAAE,YAAY,MAAA,IAAU;AAE9B,SAAO,eAAe;AAAA,IACpB,GAAG;AAAA,IACH;AAAA,IACA,WAAW,CAAC;AAAA,IACZ,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,gBAAgB,YAAY,aAAa;AAAA,IACzC,aAAa,CAAC,WAAW;AAAA,MACvB,UAAU,MAAM,WAAW,CAAC,GAAG,OAAO;AAAA,MACtC,SAAS,MAAM,aACX,GAAG,MAAM,SAAS,IAAI,MAAM,UAAU,IAAI,MAAM,QAAQ,KACxD,GAAG,MAAM,SAAS,IAAI,MAAM,QAAQ;AAAA,MACxC,SAAS,sCAAsC,MAAM,IAAI;AAAA,MACzD,WAAW,oBAAoB,MAAM,SAAS,IAAI,MAAM,QAAQ;AAAA,IAAA;AAAA,EAClE,CACD;AACH;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
1
|
+
export { expertsGrid as grid } from './grid';
|
|
2
|
+
export { expertsList as list } from './list';
|
|
3
|
+
export { expertsBio as bio } from './bio';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/feeds/experts/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/feeds/experts/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,WAAW,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AAM7C,OAAO,EAAE,WAAW,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AAO7C,OAAO,EAAE,UAAU,IAAI,GAAG,EAAE,MAAM,OAAO,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { ListProps } from './_types';
|
|
2
2
|
import { ElementModel } from '../../_types';
|
|
3
|
-
declare const
|
|
4
|
-
export default _default;
|
|
3
|
+
export declare const expertsList: (props: ListProps) => ElementModel;
|
|
5
4
|
//# sourceMappingURL=list.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../source/feeds/experts/list.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../source/feeds/experts/list.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAqBjD,eAAO,MAAM,WAAW,GAAI,OAAO,SAAS,KAAG,YAM3C,CAAC"}
|
|
@@ -1,25 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const list = (props) => createBaseFeed.createBaseFeed({
|
|
1
|
+
import { createBaseFeed } from "../../factory/core/createBaseFeed.js";
|
|
2
|
+
import "@universityofmaryland/web-builder-library";
|
|
3
|
+
import "@universityofmaryland/web-styles-library";
|
|
4
|
+
import "@universityofmaryland/web-styles-library/typography";
|
|
5
|
+
import "@universityofmaryland/web-utilities-library/theme";
|
|
6
|
+
import "@universityofmaryland/web-elements-library";
|
|
7
|
+
import "@universityofmaryland/web-elements-library/composite";
|
|
8
|
+
import "@universityofmaryland/web-elements-library/atomic";
|
|
9
|
+
import "@universityofmaryland/web-utilities-library/elements";
|
|
10
|
+
import { expertsDisplayStrategy } from "../../strategies/display/experts.js";
|
|
11
|
+
import "@universityofmaryland/web-utilities-library/network";
|
|
12
|
+
import "../../strategies/fetch/events.js";
|
|
13
|
+
import "../../strategies/fetch/news.js";
|
|
14
|
+
import { expertsFetchStrategy } from "../../strategies/fetch/experts.js";
|
|
15
|
+
import { stackedLayout } from "../../strategies/layout/grid.js";
|
|
16
|
+
import "@universityofmaryland/web-elements-library/layout";
|
|
17
|
+
const expertsList = (props) => createBaseFeed({
|
|
19
18
|
...props,
|
|
20
|
-
fetchStrategy:
|
|
21
|
-
displayStrategy:
|
|
22
|
-
layoutStrategy:
|
|
19
|
+
fetchStrategy: expertsFetchStrategy,
|
|
20
|
+
displayStrategy: expertsDisplayStrategy,
|
|
21
|
+
layoutStrategy: stackedLayout
|
|
23
22
|
});
|
|
24
|
-
|
|
23
|
+
export {
|
|
24
|
+
expertsList
|
|
25
|
+
};
|
|
25
26
|
//# sourceMappingURL=list.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sources":["../../../source/feeds/experts/list.ts"],"sourcesContent":["/**\n * Experts List Feed (Factory Pattern)\n *\n * List layout for expert profile entries using the feed factory pattern.\n * Uses person elements for displaying expert profiles in a single-column list.\n *\n * @module feeds/experts/list\n */\n\nimport { createBaseFeed } from 'factory';\nimport {\n expertsFetchStrategy,\n expertsDisplayStrategy,\n stackedLayout,\n} from 'strategies';\nimport { type ListProps } from './_types';\nimport { type ElementModel } from '../../_types';\n\n/**\n * Create an experts list feed\n *\n * @param props - Feed configuration\n * @returns ElementModel with feed element and styles\n *\n * @example\n * ```typescript\n * const feed = expertsList({\n * token: 'my-token',\n * numberOfRowsToStart: 10,\n * cardType: 'list',\n * isLazyLoad: true,\n * categories: ['computer-science', 'engineering'],\n * });\n *\n * document.body.appendChild(feed.element);\n * ```\n */\nexport
|
|
1
|
+
{"version":3,"file":"list.js","sources":["../../../source/feeds/experts/list.ts"],"sourcesContent":["/**\n * Experts List Feed (Factory Pattern)\n *\n * List layout for expert profile entries using the feed factory pattern.\n * Uses person elements for displaying expert profiles in a single-column list.\n *\n * @module feeds/experts/list\n */\n\nimport { createBaseFeed } from 'factory';\nimport {\n expertsFetchStrategy,\n expertsDisplayStrategy,\n stackedLayout,\n} from 'strategies';\nimport { type ListProps } from './_types';\nimport { type ElementModel } from '../../_types';\n\n/**\n * Create an experts list feed\n *\n * @param props - Feed configuration\n * @returns ElementModel with feed element and styles\n *\n * @example\n * ```typescript\n * const feed = expertsList({\n * token: 'my-token',\n * numberOfRowsToStart: 10,\n * cardType: 'list',\n * isLazyLoad: true,\n * categories: ['computer-science', 'engineering'],\n * });\n *\n * document.body.appendChild(feed.element);\n * ```\n */\nexport const expertsList = (props: ListProps): ElementModel =>\n createBaseFeed({\n ...props,\n fetchStrategy: expertsFetchStrategy,\n displayStrategy: expertsDisplayStrategy,\n layoutStrategy: stackedLayout,\n });\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAqCO,MAAM,cAAc,CAAC,UAC1B,eAAe;AAAA,EACb,GAAG;AAAA,EACH,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,gBAAgB;AAClB,CAAC;"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { FeaturedProps } from './_types';
|
|
2
2
|
import { ElementModel } from '../../_types';
|
|
3
|
-
declare const
|
|
4
|
-
export default _default;
|
|
3
|
+
export declare const newsFeatured: (props: FeaturedProps) => ElementModel;
|
|
5
4
|
//# sourceMappingURL=featured.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"featured.d.ts","sourceRoot":"","sources":["../../../source/feeds/news/featured.ts"],"names":[],"mappings":"AA+BA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"featured.d.ts","sourceRoot":"","sources":["../../../source/feeds/news/featured.ts"],"names":[],"mappings":"AA+BA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AA0djD,eAAO,MAAM,YAAY,GAAI,OAAO,aAAa,KAAG,YAsJnD,CAAC"}
|