@admin-layout/client 12.2.5-alpha.2 → 12.2.5-alpha.6

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/lib/index.js CHANGED
@@ -1 +1 @@
1
- export{SearchBarBehavior}from'./interfaces/settings.js';export{APPLICATION_ERROR_SLOT_FILL,CHANGE_LANGUAGE,CHANGE_SETTINGS_ACTION}from'./constants/constants.js';export{BACKEND_ERROR,CLEAR_APPLICATION_ERRORS,DISMISS_APPLICATION_ERROR,LOG_APPLICATION_ERROR,RESTORE_APPLICATION_ERRORS}from'./constants/error.js';export{HEADER_SEARCHBAR_FILL,HEADER_SEARCH_BUTTON_FILL,RIGHT_CONTENT_FILL,SCROLL_END_FILL}from'./constants/layout.js';export{languages}from'./constants/languages.js';export{dismissApplicationError,restoreApplicationError,setApplicationError}from'./redux/actions/error-actions.js';export{applicationErrors,initialErrorsState}from'./redux/reducers/error.js';export{settingsReducer}from'./redux/reducers/settings.js';export{store}from'./redux/store.js';export{useAppDispatch,useAppSelector}from'./redux/hooks.js';export{getMenuSeparation}from'./utils/seperatedMenus.js';export{useComponentSize,useIsomorphicLayoutEffect}from'./utils/componentSize.js';export{matchParentRoute}from'./utils/parentRoute.js';export{addProLayoutParentKeys,filterRoutesWithLocale,menuDataRender,removeUnnecessaryProperties,setLocale,transformData}from'./utils/menuUtils.js';export{getMatchMenuKeys}from'./utils/matchMenuKeys.js';export{generateMenuPath}from'./utils/generateMenuLink.js';export{compareAndSaveSettingsDifferences}from'./utils/settingsDifference.js';export{safeLocalStorage}from'./utils/storage.js';export{getStorageMode,isSpaMode,settingsStorage}from'./utils/settingsStorage.js';export{dateLabel,dayOffset,durationLabel,flightPrice,isFlightAttachment,stopsLabel,toFlightCard,toFlightCards,wallClock}from'./utils/flightCards.js';export{ApplicationErrorHandlerCommon}from'./components/ApplicationErrorHandlerCommon.js';export{ErrorBoundaryCommon}from'./components/ErrorBoundaryCommon.js';export{ApplicationErrorFillWrapper}from'./components/ApplicationErrorFillWrapper.js';export{LayoutCookieProvider}from'./components/LayoutCookieProvider.js';export{ErrorLink,errorReduxLink}from'./graphql/link/error-link.js';export{systemFont}from'./themes/systemFont/index.js';export{borderRadius,colors,lightLayoutTheme,lightNavigationBarTheme,lightTabBarTheme,shadows,sizes,spacings,textVariants}from'./themes/templates/lightLayoutTheme.js';export{createLayoutTheme}from'./themes/templates/createLayoutTheme.js';export{darkColors,darkLayoutTheme,darkNavigationBarTheme,darkTabBarTheme}from'./themes/templates/darkLayoutTheme.js';export{config}from'./config/env-config.js';export{AMENITIES,DEFAULT_HEADER,DEFAULT_LAYOUT,DEFAULT_SETTINGS,SEARCH_TYPES,SHARED_VIEW_CONFIG}from'./config/defaultSettings.js';export{useLayoutSettings}from'./hooks/useLayoutSettings.js';export{usePermissionAutoFetch,useSetting,useSettingsLoader}from'@adminide-stack/platform-client';export{ClientOnly}from'./hooks/Client-only.js';export{blue}from'./colors/presets/blue.js';export{brinkPink}from'./colors/presets/brinkPink.js';export{cyan}from'./colors/presets/cyan.js';export{green}from'./colors/presets/green.js';export{lime}from'./colors/presets/lime.js';export{orange}from'./colors/presets/orange.js';export{pink}from'./colors/presets/pink.js';export{purple}from'./colors/presets/purple.js';export{red}from'./colors/presets/red.js';export{skyBlue}from'./colors/presets/skyBlue.js';export{turquoise}from'./colors/presets/turquoise.js';export{yellow}from'./colors/presets/yellow.js';export{white}from'./colors/presets/white.js';export{black}from'./colors/presets/black.js';export{colorList,getThemeColors}from'./colors/colorsList.js';//# sourceMappingURL=index.js.map
1
+ export{SearchBarBehavior}from'./interfaces/settings.js';export{APPLICATION_ERROR_SLOT_FILL,CHANGE_LANGUAGE,CHANGE_SETTINGS_ACTION}from'./constants/constants.js';export{BACKEND_ERROR,CLEAR_APPLICATION_ERRORS,DISMISS_APPLICATION_ERROR,LOG_APPLICATION_ERROR,RESTORE_APPLICATION_ERRORS}from'./constants/error.js';export{HEADER_SEARCHBAR_FILL,HEADER_SEARCH_BUTTON_FILL,RIGHT_CONTENT_FILL,SCROLL_END_FILL}from'./constants/layout.js';export{languages}from'./constants/languages.js';export{dismissApplicationError,restoreApplicationError,setApplicationError}from'./redux/actions/error-actions.js';export{applicationErrors,initialErrorsState}from'./redux/reducers/error.js';export{settingsReducer}from'./redux/reducers/settings.js';export{store}from'./redux/store.js';export{useAppDispatch,useAppSelector}from'./redux/hooks.js';export{getMenuSeparation}from'./utils/seperatedMenus.js';export{useComponentSize,useIsomorphicLayoutEffect}from'./utils/componentSize.js';export{matchParentRoute}from'./utils/parentRoute.js';export{addProLayoutParentKeys,filterRoutesWithLocale,menuDataRender,removeUnnecessaryProperties,setLocale,transformData}from'./utils/menuUtils.js';export{getMatchMenuKeys}from'./utils/matchMenuKeys.js';export{generateMenuPath}from'./utils/generateMenuLink.js';export{compareAndSaveSettingsDifferences}from'./utils/settingsDifference.js';export{safeLocalStorage}from'./utils/storage.js';export{getStorageMode,isSpaMode,settingsStorage}from'./utils/settingsStorage.js';export{airlineCode,airlineTone,cabinLabel,dateLabel,dayOffset,durationLabel,flightBadgeLabel,flightNumberLabel,flightPrice,flightPriceValue,flightResultSummary,isFlightAttachment,rankFlightCards,sortFlightCards,stopsLabel,toFlightCard,toFlightCards,wallClock}from'./utils/flightCards.js';export{ApplicationErrorHandlerCommon}from'./components/ApplicationErrorHandlerCommon.js';export{ErrorBoundaryCommon}from'./components/ErrorBoundaryCommon.js';export{ApplicationErrorFillWrapper}from'./components/ApplicationErrorFillWrapper.js';export{LayoutCookieProvider}from'./components/LayoutCookieProvider.js';export{ErrorLink,errorReduxLink}from'./graphql/link/error-link.js';export{systemFont}from'./themes/systemFont/index.js';export{borderRadius,colors,lightLayoutTheme,lightNavigationBarTheme,lightTabBarTheme,shadows,sizes,spacings,textVariants}from'./themes/templates/lightLayoutTheme.js';export{createLayoutTheme}from'./themes/templates/createLayoutTheme.js';export{darkColors,darkLayoutTheme,darkNavigationBarTheme,darkTabBarTheme}from'./themes/templates/darkLayoutTheme.js';export{config}from'./config/env-config.js';export{AMENITIES,DEFAULT_HEADER,DEFAULT_LAYOUT,DEFAULT_SETTINGS,SEARCH_TYPES,SHARED_VIEW_CONFIG}from'./config/defaultSettings.js';export{useLayoutSettings}from'./hooks/useLayoutSettings.js';export{usePermissionAutoFetch,useSetting,useSettingsLoader}from'@adminide-stack/platform-client';export{ClientOnly}from'./hooks/Client-only.js';export{blue}from'./colors/presets/blue.js';export{brinkPink}from'./colors/presets/brinkPink.js';export{cyan}from'./colors/presets/cyan.js';export{green}from'./colors/presets/green.js';export{lime}from'./colors/presets/lime.js';export{orange}from'./colors/presets/orange.js';export{pink}from'./colors/presets/pink.js';export{purple}from'./colors/presets/purple.js';export{red}from'./colors/presets/red.js';export{skyBlue}from'./colors/presets/skyBlue.js';export{turquoise}from'./colors/presets/turquoise.js';export{yellow}from'./colors/presets/yellow.js';export{white}from'./colors/presets/white.js';export{black}from'./colors/presets/black.js';export{colorList,getThemeColors}from'./colors/colorsList.js';//# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- export{SearchBarBehavior}from'./interfaces/settings.js';export{APPLICATION_ERROR_SLOT_FILL,CHANGE_LANGUAGE,CHANGE_SETTINGS_ACTION}from'./constants/constants.js';export{BACKEND_ERROR,CLEAR_APPLICATION_ERRORS,DISMISS_APPLICATION_ERROR,LOG_APPLICATION_ERROR,RESTORE_APPLICATION_ERRORS}from'./constants/error.js';export{HEADER_SEARCHBAR_FILL,HEADER_SEARCH_BUTTON_FILL,RIGHT_CONTENT_FILL,SCROLL_END_FILL}from'./constants/layout.js';export{languages}from'./constants/languages.js';export{dismissApplicationError,restoreApplicationError,setApplicationError}from'./redux/actions/error-actions.js';export{applicationErrors,initialErrorsState}from'./redux/reducers/error.js';export{settingsReducer}from'./redux/reducers/settings.js';export{store}from'./redux/store.js';export{useAppDispatch,useAppSelector}from'./redux/hooks.js';export{getMenuSeparation}from'./utils/seperatedMenus.js';export{useComponentSize,useIsomorphicLayoutEffect}from'./utils/componentSize.js';export{matchParentRoute}from'./utils/parentRoute.js';export{addProLayoutParentKeys,filterRoutesWithLocale,menuDataRender,removeUnnecessaryProperties,setLocale,transformData}from'./utils/menuUtils.js';export{getMatchMenuKeys}from'./utils/matchMenuKeys.js';export{generateMenuPath}from'./utils/generateMenuLink.js';export{compareAndSaveSettingsDifferences}from'./utils/settingsDifference.js';export{safeLocalStorage}from'./utils/storage.js';export{getStorageMode,isSpaMode,settingsStorage}from'./utils/settingsStorage.js';export{dateLabel,dayOffset,durationLabel,flightPrice,isFlightAttachment,stopsLabel,toFlightCard,toFlightCards,wallClock}from'./utils/flightCards.js';export{ApplicationErrorHandlerCommon}from'./components/ApplicationErrorHandlerCommon.js';export{ErrorBoundaryCommon}from'./components/ErrorBoundaryCommon.js';export{ApplicationErrorFillWrapper}from'./components/ApplicationErrorFillWrapper.js';export{LayoutCookieProvider}from'./components/LayoutCookieProvider.js';export{ErrorLink,errorReduxLink}from'./graphql/link/error-link.js';export{systemFont}from'./themes/systemFont/index.js';export{borderRadius,colors,lightLayoutTheme,lightNavigationBarTheme,lightTabBarTheme,shadows,sizes,spacings,textVariants}from'./themes/templates/lightLayoutTheme.js';export{createLayoutTheme}from'./themes/templates/createLayoutTheme.js';export{darkColors,darkLayoutTheme,darkNavigationBarTheme,darkTabBarTheme}from'./themes/templates/darkLayoutTheme.js';export{config}from'./config/env-config.js';export{AMENITIES,DEFAULT_HEADER,DEFAULT_LAYOUT,DEFAULT_SETTINGS,SEARCH_TYPES,SHARED_VIEW_CONFIG}from'./config/defaultSettings.js';//# sourceMappingURL=index.native.js.map
1
+ export{SearchBarBehavior}from'./interfaces/settings.js';export{APPLICATION_ERROR_SLOT_FILL,CHANGE_LANGUAGE,CHANGE_SETTINGS_ACTION}from'./constants/constants.js';export{BACKEND_ERROR,CLEAR_APPLICATION_ERRORS,DISMISS_APPLICATION_ERROR,LOG_APPLICATION_ERROR,RESTORE_APPLICATION_ERRORS}from'./constants/error.js';export{HEADER_SEARCHBAR_FILL,HEADER_SEARCH_BUTTON_FILL,RIGHT_CONTENT_FILL,SCROLL_END_FILL}from'./constants/layout.js';export{languages}from'./constants/languages.js';export{dismissApplicationError,restoreApplicationError,setApplicationError}from'./redux/actions/error-actions.js';export{applicationErrors,initialErrorsState}from'./redux/reducers/error.js';export{settingsReducer}from'./redux/reducers/settings.js';export{store}from'./redux/store.js';export{useAppDispatch,useAppSelector}from'./redux/hooks.js';export{getMenuSeparation}from'./utils/seperatedMenus.js';export{useComponentSize,useIsomorphicLayoutEffect}from'./utils/componentSize.js';export{matchParentRoute}from'./utils/parentRoute.js';export{addProLayoutParentKeys,filterRoutesWithLocale,menuDataRender,removeUnnecessaryProperties,setLocale,transformData}from'./utils/menuUtils.js';export{getMatchMenuKeys}from'./utils/matchMenuKeys.js';export{generateMenuPath}from'./utils/generateMenuLink.js';export{compareAndSaveSettingsDifferences}from'./utils/settingsDifference.js';export{safeLocalStorage}from'./utils/storage.js';export{getStorageMode,isSpaMode,settingsStorage}from'./utils/settingsStorage.js';export{airlineCode,airlineTone,cabinLabel,dateLabel,dayOffset,durationLabel,flightBadgeLabel,flightNumberLabel,flightPrice,flightPriceValue,flightResultSummary,isFlightAttachment,rankFlightCards,sortFlightCards,stopsLabel,toFlightCard,toFlightCards,wallClock}from'./utils/flightCards.js';export{ApplicationErrorHandlerCommon}from'./components/ApplicationErrorHandlerCommon.js';export{ErrorBoundaryCommon}from'./components/ErrorBoundaryCommon.js';export{ApplicationErrorFillWrapper}from'./components/ApplicationErrorFillWrapper.js';export{LayoutCookieProvider}from'./components/LayoutCookieProvider.js';export{ErrorLink,errorReduxLink}from'./graphql/link/error-link.js';export{systemFont}from'./themes/systemFont/index.js';export{borderRadius,colors,lightLayoutTheme,lightNavigationBarTheme,lightTabBarTheme,shadows,sizes,spacings,textVariants}from'./themes/templates/lightLayoutTheme.js';export{createLayoutTheme}from'./themes/templates/createLayoutTheme.js';export{darkColors,darkLayoutTheme,darkNavigationBarTheme,darkTabBarTheme}from'./themes/templates/darkLayoutTheme.js';export{config}from'./config/env-config.js';export{AMENITIES,DEFAULT_HEADER,DEFAULT_LAYOUT,DEFAULT_SETTINGS,SEARCH_TYPES,SHARED_VIEW_CONFIG}from'./config/defaultSettings.js';//# sourceMappingURL=index.native.js.map
@@ -48,7 +48,13 @@ export interface FlightOfferSetLike {
48
48
  properties?: FlightOfferLike[];
49
49
  /** ISO 4217 currency of the `price` values (default "USD"). */
50
50
  currency?: string;
51
+ title?: string;
52
+ totalCount?: number;
51
53
  }
54
+ /** A standout a card can be labelled with once the result set is ranked. */
55
+ export type FlightBadge = 'cheapest' | 'fastest' | 'best';
56
+ /** Orderings a result list offers. `recommended` keeps the order the agent returned. */
57
+ export type FlightSort = 'recommended' | 'cheapest' | 'fastest' | 'departure';
52
58
  export interface FlightSliceView {
53
59
  origin: string;
54
60
  destination: string;
@@ -57,7 +63,12 @@ export interface FlightSliceView {
57
63
  /** "+1" when it lands on a later calendar day than it left. */
58
64
  dayOffset?: string;
59
65
  stops?: string;
66
+ /** Numeric stops for a renderer that draws them on the route line. */
67
+ stopCount?: number;
60
68
  duration?: string;
69
+ durationMinutes?: number;
70
+ /** "Sun, Oct 4": the slice's departure date. */
71
+ date?: string;
61
72
  /**
62
73
  * The small line under the route. One way: the duration only, since the
63
74
  * footer already says how it flies ("ANA · Nonstop"). Round trip: duration
@@ -79,6 +90,26 @@ export interface FlightCardView {
79
90
  price?: string;
80
91
  /** One sentence a screen reader announces for the whole card. */
81
92
  accessibleLabel: string;
93
+ /** Marketing airline, e.g. "Airblue". */
94
+ airline?: string;
95
+ /** Two-letter monogram for the airline tile: the IATA prefix of a flight number, else initials. */
96
+ airlineCode: string;
97
+ /** Stable 0..7 palette slot for the monogram, so one airline keeps one colour across cards. */
98
+ airlineTone: number;
99
+ /** "PA 201", or "PA 201 · PA 202" for a round trip. */
100
+ flightNumber?: string;
101
+ seller?: string;
102
+ /** Outbound departure date, "Sun, Oct 4". */
103
+ date?: string;
104
+ /** Humanised cabin, "Business"; omitted for plain economy. */
105
+ cabin?: string;
106
+ roundTrip: boolean;
107
+ /** Numeric price for ranking; undefined when the offer carries no usable number. */
108
+ priceValue?: number;
109
+ /** Door-to-door minutes across every slice; undefined when any slice lacks one. */
110
+ totalMinutes?: number;
111
+ /** Set by {@link rankFlightCards}: the standouts this card is. */
112
+ badges: FlightBadge[];
82
113
  }
83
114
  export declare const wallClock: (iso?: string) => string | undefined;
84
115
  export declare const dayOffset: (departAt?: string, arriveAt?: string) => string | undefined;
@@ -87,8 +118,56 @@ export declare const dateLabel: (iso?: string) => string | undefined;
87
118
  export declare const stopsLabel: (stops?: number) => string | undefined;
88
119
  export declare const durationLabel: (minutes?: number) => string | undefined;
89
120
  export declare const flightPrice: (item: FlightOfferLike, currency?: string) => string | undefined;
121
+ /** The numeric fare, from `price` or parsed out of the label; undefined when neither is usable. */
122
+ export declare const flightPriceValue: (item: FlightOfferLike) => number | undefined;
123
+ /** "premium_economy" → "Premium economy"; plain economy is the default and reads as nothing. */
124
+ export declare const cabinLabel: (cabinClass?: string) => string | undefined;
125
+ export declare const flightNumberLabel: (numbers?: string[]) => string | undefined;
126
+ /** The two-letter tile for an airline: its IATA prefix when a flight number carries one, else initials. */
127
+ export declare const airlineCode: (airline?: string, flightNumbers?: string[]) => string;
128
+ /** A stable palette slot for an airline name, so Airblue is the same colour on every card. */
129
+ export declare const airlineTone: (airline?: string, slots?: number) => number;
90
130
  /** True when the attachment is a flight result, so the card shows flights, not stays. */
91
131
  export declare const isFlightAttachment: (a?: FlightOfferSetLike) => boolean;
92
132
  export declare const toFlightCard: (item: FlightOfferLike, index: number, currency?: string) => FlightCardView | null;
133
+ export declare const flightBadgeLabel: (badge: FlightBadge) => string;
134
+ /**
135
+ * Labels the standouts of a result set: the cheapest fare, the shortest trip,
136
+ * and, when it is a third card, the best price-for-time. Needs two priced
137
+ * offers to mean anything; a lone card gets no badge. Cards keep their order.
138
+ */
139
+ export declare const rankFlightCards: (cards: FlightCardView[]) => FlightCardView[];
140
+ /** Every offer as a ranked card; stays and unusable items are skipped. */
93
141
  export declare const toFlightCards: (a: FlightOfferSetLike) => FlightCardView[];
142
+ /** A stable ordering of the cards; `recommended` is the order the agent returned them in. */
143
+ export declare const sortFlightCards: (cards: FlightCardView[], sort: FlightSort) => FlightCardView[];
144
+ /** One quick pick in the result header: "Cheapest · $61 · Airblue". */
145
+ export interface FlightPick {
146
+ badge: FlightBadge;
147
+ label: string;
148
+ /** The card it points at. */
149
+ key: string;
150
+ price?: string;
151
+ duration?: string;
152
+ airline?: string;
153
+ }
154
+ /** What a result set is as a whole: the line above the cards and the panel header. */
155
+ export interface FlightResultSummary {
156
+ /** "ISB → KHI", or "ISB ⇄ KHI" for a round trip. */
157
+ route?: string;
158
+ origin?: string;
159
+ destination?: string;
160
+ roundTrip: boolean;
161
+ /** "Sun, Oct 4", or "Sun, Oct 4 – Sun, Oct 11"; unset when the offers span different dates. */
162
+ date?: string;
163
+ /** True when every offer leaves on the same date, so a card need not repeat it. */
164
+ sameDate: boolean;
165
+ count: number;
166
+ /** Lowest fare, formatted. */
167
+ fromPrice?: string;
168
+ /** The seller, when every offer comes from one. */
169
+ seller?: string;
170
+ picks: FlightPick[];
171
+ }
172
+ export declare const flightResultSummary: (a: FlightOfferSetLike, cards?: FlightCardView[]) => FlightResultSummary;
94
173
  //# sourceMappingURL=flightCards.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"flightCards.d.ts","sourceRoot":"","sources":["../../src/utils/flightCards.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flightCards.d.ts","sourceRoot":"","sources":["../../src/utils/flightCards.ts"],"names":[],"mappings":"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"}
@@ -56,22 +56,100 @@ const durationLabel = (minutes) => {
56
56
  return `${m}m`;
57
57
  return m === 0 ? `${h}h` : `${h}h ${m}m`;
58
58
  };
59
- const flightPrice = (item, currency = 'USD') => {
60
- if (item.priceLabel)
61
- return item.priceLabel;
62
- if (typeof item.price !== 'number' || !Number.isFinite(item.price))
63
- return undefined;
59
+ const formatCurrency = (amount, currency) => {
64
60
  try {
65
- return new Intl.NumberFormat('en-US', {
61
+ return (new Intl.NumberFormat('en-US', {
66
62
  style: 'currency',
67
63
  currency,
68
64
  maximumFractionDigits: 0,
69
- }).format(item.price);
65
+ })
66
+ .format(amount)
67
+ // Intl pads "PKR 17,500" with a no-break space; a plain one wraps and compares sanely.
68
+ .replace(/\u00a0/g, ' '));
70
69
  }
71
70
  catch {
72
71
  // An unknown currency code must not take the whole card down.
73
- return `${Math.round(item.price)} ${currency}`;
72
+ return `${Math.round(amount)} ${currency}`;
73
+ }
74
+ };
75
+ /** A provider label written as "<ISO code> <amount>", e.g. "USD 61.00" or "PKR 17,500". */
76
+ const CODE_AMOUNT = /^([A-Z]{3})\s+([\d,]+(?:\.\d+)?)$/;
77
+ const flightPrice = (item, currency = 'USD') => {
78
+ if (item.priceLabel) {
79
+ // "USD 61.00" reads as "$61": same currency, the way a fare is printed.
80
+ const m = CODE_AMOUNT.exec(item.priceLabel.trim());
81
+ if (m) {
82
+ const amount = Number(m[2].replace(/,/g, ''));
83
+ if (Number.isFinite(amount))
84
+ return formatCurrency(amount, m[1]);
85
+ }
86
+ return item.priceLabel;
74
87
  }
88
+ if (typeof item.price !== 'number' || !Number.isFinite(item.price))
89
+ return undefined;
90
+ return formatCurrency(item.price, currency);
91
+ };
92
+ /** The numeric fare, from `price` or parsed out of the label; undefined when neither is usable. */
93
+ const flightPriceValue = (item) => {
94
+ if (typeof item.price === 'number' && Number.isFinite(item.price) && item.price > 0)
95
+ return item.price;
96
+ const digits = item.priceLabel?.replace(/[^\d.]/g, '');
97
+ const parsed = digits ? Number(digits) : NaN;
98
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : undefined;
99
+ };
100
+ const CABIN_LABELS = {
101
+ economy: 'Economy',
102
+ premium_economy: 'Premium economy',
103
+ premium: 'Premium economy',
104
+ business: 'Business',
105
+ first: 'First',
106
+ };
107
+ /** "premium_economy" → "Premium economy"; plain economy is the default and reads as nothing. */
108
+ const cabinLabel = (cabinClass) => {
109
+ const key = cabinClass
110
+ ?.trim()
111
+ .toLowerCase()
112
+ .replace(/[\s-]+/g, '_');
113
+ if (!key || key === 'economy')
114
+ return undefined;
115
+ return CABIN_LABELS[key] ?? key.replace(/_/g, ' ').replace(/^\w/, (c) => c.toUpperCase());
116
+ };
117
+ /** An IATA (2 chars, at least one letter) or ICAO (3 letters) airline code, then the number. */
118
+ const FLIGHT_NUMBER = /^([A-Z]{2,3}|[A-Z][0-9]|[0-9][A-Z])\s*(\d{1,4}[A-Z]?)$/i;
119
+ /** "PA201" → "PA 201"; anything else is shown as written. */
120
+ const formatFlightNumber = (raw) => {
121
+ const m = FLIGHT_NUMBER.exec(raw.trim());
122
+ return m ? `${m[1].toUpperCase()} ${m[2].toUpperCase()}` : raw.trim();
123
+ };
124
+ const flightNumberLabel = (numbers) => {
125
+ const list = (numbers ?? []).map((n) => n?.trim()).filter(Boolean);
126
+ if (list.length === 0)
127
+ return undefined;
128
+ const shown = list.slice(0, 2).map(formatFlightNumber);
129
+ return list.length > 2 ? `${shown.join(' · ')} +${list.length - 2}` : shown.join(' · ');
130
+ };
131
+ /** The two-letter tile for an airline: its IATA prefix when a flight number carries one, else initials. */
132
+ const airlineCode = (airline, flightNumbers) => {
133
+ const first = flightNumbers?.find((n) => n && FLIGHT_NUMBER.test(n.trim()));
134
+ if (first)
135
+ return FLIGHT_NUMBER.exec(first.trim())[1].toUpperCase().slice(0, 2);
136
+ const words = (airline ?? '')
137
+ .split(/[\s,/&-]+/)
138
+ .map((w) => w.replace(/[^A-Za-z0-9]/g, ''))
139
+ .filter(Boolean);
140
+ if (words.length === 0)
141
+ return '✈';
142
+ if (words.length === 1)
143
+ return words[0].slice(0, 2).toUpperCase();
144
+ return (words[0][0] + words[1][0]).toUpperCase();
145
+ };
146
+ /** A stable palette slot for an airline name, so Airblue is the same colour on every card. */
147
+ const airlineTone = (airline, slots = 8) => {
148
+ const s = (airline ?? '').toLowerCase();
149
+ let h = 0;
150
+ for (let i = 0; i < s.length; i++)
151
+ h = (h * 31 + s.charCodeAt(i)) >>> 0;
152
+ return h % slots;
75
153
  };
76
154
  const sliceView = (s) => ({
77
155
  origin: s.origin,
@@ -80,7 +158,12 @@ const sliceView = (s) => ({
80
158
  arriveTime: wallClock(s.arriveAt),
81
159
  dayOffset: dayOffset(s.departAt, s.arriveAt),
82
160
  stops: stopsLabel(s.stops),
161
+ stopCount: typeof s.stops === 'number' && Number.isFinite(s.stops) && s.stops >= 0 ? s.stops : undefined,
83
162
  duration: durationLabel(s.durationMinutes),
163
+ durationMinutes: typeof s.durationMinutes === 'number' && Number.isFinite(s.durationMinutes) && s.durationMinutes > 0
164
+ ? s.durationMinutes
165
+ : undefined,
166
+ date: dateLabel(s.departAt),
84
167
  });
85
168
  /** True when the attachment is a flight result, so the card shows flights, not stays. */
86
169
  const isFlightAttachment = (a) => !!a?.properties?.some((p) => (p.flight?.slices?.length ?? 0) > 0);
@@ -95,17 +178,20 @@ const toFlightCard = (item, index, currency) => {
95
178
  if (!flight || slices.length === 0)
96
179
  return null;
97
180
  const outbound = flight.slices[0];
98
- const seller = flight.seller?.trim();
181
+ const seller = flight.seller?.trim() || undefined;
182
+ const airline = flight.airline?.trim() || undefined;
99
183
  const date = dateLabel(outbound.departAt);
100
184
  const header = [seller, date].filter(Boolean).join(' · ') || `${slices[0].origin} to ${slices[0].destination}`;
101
185
  // One direction: say how it flies. A round trip already shows stops per
102
186
  // row, so the footer names the trip type instead of repeating them.
103
187
  const how = roundTrip ? 'Round trip' : slices[0].stops;
104
- const footer = [flight.airline?.trim() || item.title, how].filter(Boolean).join(' · ');
188
+ const footer = [airline || item.title, how].filter(Boolean).join(' · ');
105
189
  const price = flightPrice(item, currency);
106
190
  const spoken = slices
107
191
  .map((s) => `${s.origin} ${s.departTime ?? ''} to ${s.destination} ${s.arriveTime ?? ''}${s.dayOffset === '+1' ? ' next day' : s.dayOffset ? ` ${s.dayOffset.slice(1)} days later` : ''}${s.stops ? `, ${s.stops.toLowerCase()}` : ''}`)
108
192
  .join('; returning ');
193
+ const minutes = slices.map((s) => s.durationMinutes);
194
+ const totalMinutes = minutes.every((m) => m != null) ? minutes.reduce((a, b) => a + b, 0) : undefined;
109
195
  return {
110
196
  key: item.id ?? `flight-${index}`,
111
197
  url: item.url,
@@ -123,6 +209,123 @@ const toFlightCard = (item, index, currency) => {
123
209
  ]
124
210
  .filter(Boolean)
125
211
  .join(', '),
212
+ airline,
213
+ airlineCode: airlineCode(airline, flight.flightNumbers),
214
+ airlineTone: airlineTone(airline ?? item.title),
215
+ flightNumber: flightNumberLabel(flight.flightNumbers),
216
+ seller,
217
+ date,
218
+ cabin: cabinLabel(flight.cabinClass),
219
+ roundTrip,
220
+ priceValue: flightPriceValue(item),
221
+ totalMinutes,
222
+ badges: [],
126
223
  };
127
224
  };
128
- const toFlightCards = (a) => (a.properties ?? []).map((p, i) => toFlightCard(p, i, a.currency)).filter((c) => c !== null);export{dateLabel,dayOffset,durationLabel,flightPrice,isFlightAttachment,stopsLabel,toFlightCard,toFlightCards,wallClock};//# sourceMappingURL=flightCards.js.map
225
+ const BADGE_WORDS = {
226
+ cheapest: 'cheapest',
227
+ fastest: 'fastest',
228
+ best: 'best value',
229
+ };
230
+ const flightBadgeLabel = (badge) => badge === 'best' ? 'Best value' : badge === 'cheapest' ? 'Cheapest' : 'Fastest';
231
+ /**
232
+ * Labels the standouts of a result set: the cheapest fare, the shortest trip,
233
+ * and, when it is a third card, the best price-for-time. Needs two priced
234
+ * offers to mean anything; a lone card gets no badge. Cards keep their order.
235
+ */
236
+ const rankFlightCards = (cards) => {
237
+ const priced = cards.filter((c) => c.priceValue != null);
238
+ if (priced.length < 2)
239
+ return cards.map((c) => ({ ...c, badges: [] }));
240
+ const byPrice = (a, b) => a.priceValue - b.priceValue || (a.totalMinutes ?? Infinity) - (b.totalMinutes ?? Infinity);
241
+ const cheapest = [...priced].sort(byPrice)[0];
242
+ const timed = priced.filter((c) => c.totalMinutes != null);
243
+ const fastest = timed.length
244
+ ? [...timed].sort((a, b) => a.totalMinutes - b.totalMinutes || a.priceValue - b.priceValue)[0]
245
+ : undefined;
246
+ let best;
247
+ if (fastest && timed.length >= 2) {
248
+ const minPrice = cheapest.priceValue;
249
+ const minMinutes = fastest.totalMinutes;
250
+ const score = (c) => c.priceValue / minPrice + c.totalMinutes / minMinutes;
251
+ best = [...timed].sort((a, b) => score(a) - score(b) || byPrice(a, b))[0];
252
+ }
253
+ return cards.map((c) => {
254
+ const badges = [];
255
+ if (c === cheapest)
256
+ badges.push('cheapest');
257
+ if (fastest && c === fastest)
258
+ badges.push('fastest');
259
+ // "Best value" only when it is a different card: the cheapest or
260
+ // fastest already says more than a derived score would.
261
+ if (best && c === best && c !== cheapest && c !== fastest)
262
+ badges.push('best');
263
+ if (badges.length === 0)
264
+ return { ...c, badges };
265
+ return {
266
+ ...c,
267
+ badges,
268
+ accessibleLabel: `${badges.map((b) => BADGE_WORDS[b]).join(' and ')}, ${c.accessibleLabel}`,
269
+ };
270
+ });
271
+ };
272
+ /** Every offer as a ranked card; stays and unusable items are skipped. */
273
+ const toFlightCards = (a) => rankFlightCards((a.properties ?? [])
274
+ .map((p, i) => toFlightCard(p, i, a.currency))
275
+ .filter((c) => c !== null));
276
+ /** A stable ordering of the cards; `recommended` is the order the agent returned them in. */
277
+ const sortFlightCards = (cards, sort) => {
278
+ if (sort === 'recommended')
279
+ return cards;
280
+ const metric = (c) => {
281
+ if (sort === 'cheapest')
282
+ return c.priceValue ?? Infinity;
283
+ if (sort === 'fastest')
284
+ return c.totalMinutes ?? Infinity;
285
+ return c.slices[0]?.departTime ?? '99:99';
286
+ };
287
+ return cards
288
+ .map((c, index) => ({ c, index, m: metric(c) }))
289
+ .sort((a, b) => (a.m < b.m ? -1 : a.m > b.m ? 1 : 0) || a.index - b.index)
290
+ .map((x) => x.c);
291
+ };
292
+ const flightResultSummary = (a, cards = toFlightCards(a)) => {
293
+ const first = cards[0];
294
+ const out = first?.slices[0];
295
+ const back = first?.roundTrip ? first.slices[first.slices.length - 1] : undefined;
296
+ const roundTrip = !!back;
297
+ const dates = new Set(cards.map((c) => c.date ?? ''));
298
+ const sameDate = dates.size <= 1;
299
+ const outDate = sameDate ? first?.date : undefined;
300
+ const date = outDate ? [outDate, back?.date].filter(Boolean).join(' – ') : undefined;
301
+ const priced = cards.filter((c) => c.priceValue != null);
302
+ const cheapestCard = priced.length ? [...priced].sort((x, y) => x.priceValue - y.priceValue)[0] : undefined;
303
+ const sellers = new Set(cards.map((c) => c.seller ?? ''));
304
+ const seller = sellers.size === 1 ? first?.seller : undefined;
305
+ const picks = [];
306
+ for (const badge of ['cheapest', 'fastest', 'best']) {
307
+ const card = cards.find((c) => c.badges.includes(badge));
308
+ if (!card)
309
+ continue;
310
+ picks.push({
311
+ badge,
312
+ label: flightBadgeLabel(badge),
313
+ key: card.key,
314
+ price: card.price,
315
+ duration: durationLabel(card.totalMinutes),
316
+ airline: card.airline,
317
+ });
318
+ }
319
+ return {
320
+ route: out ? `${out.origin} ${roundTrip ? '⇄' : '→'} ${out.destination}` : undefined,
321
+ origin: out?.origin,
322
+ destination: out?.destination,
323
+ roundTrip,
324
+ date,
325
+ sameDate,
326
+ count: a.totalCount ?? cards.length,
327
+ fromPrice: cheapestCard?.price,
328
+ seller,
329
+ picks,
330
+ };
331
+ };export{airlineCode,airlineTone,cabinLabel,dateLabel,dayOffset,durationLabel,flightBadgeLabel,flightNumberLabel,flightPrice,flightPriceValue,flightResultSummary,isFlightAttachment,rankFlightCards,sortFlightCards,stopsLabel,toFlightCard,toFlightCards,wallClock};//# sourceMappingURL=flightCards.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"flightCards.js","sources":["../../src/utils/flightCards.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flightCards.js","sources":["../../src/utils/flightCards.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@admin-layout/client",
3
- "version": "12.2.5-alpha.2",
3
+ "version": "12.2.5-alpha.6",
4
4
  "description": "Sample client for higher packages to depend on",
5
5
  "license": "ISC",
6
6
  "author": "CDMBase LLC",
@@ -44,5 +44,5 @@
44
44
  "typescript": {
45
45
  "definition": "lib/index.d.ts"
46
46
  },
47
- "gitHead": "5ccfbf6ff024031ed38926197c3aef7b3f4dc8ee"
47
+ "gitHead": "39fe142eb31f78df53a5de2963fcae009d3c9fbd"
48
48
  }