@riviai/smart-sort 0.0.0-stage → 0.1.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/README.md +86 -2
- package/angular/index.d.ts +75 -0
- package/angular/index.js +208 -0
- package/chunks/ar-DOxT_9p7-xb81ZNgj.js +86 -0
- package/chunks/ar-DOxT_9p7-xb81ZNgj.js.map +1 -0
- package/chunks/en-D58zE54i-DbqdlOqH.js +86 -0
- package/chunks/en-D58zE54i-DbqdlOqH.js.map +1 -0
- package/custom-elements.json +897 -0
- package/docs/from-angular.md +131 -0
- package/docs/install.md +84 -0
- package/docs/integration.md +468 -0
- package/docs/quickstart.md +86 -0
- package/docs/reference.md +869 -0
- package/docs/styling.md +313 -0
- package/docs/troubleshooting.md +55 -0
- package/index.d.ts +586 -0
- package/index.js +7172 -0
- package/index.js.map +1 -0
- package/package.json +53 -4
- package/react.d.ts +60 -0
- package/react.js +1 -0
- package/standalone/chunks/ar-DOxT_9p7-xb81ZNgj.js +86 -0
- package/standalone/chunks/ar-DOxT_9p7-xb81ZNgj.js.map +1 -0
- package/standalone/chunks/en-D58zE54i-DbqdlOqH.js +86 -0
- package/standalone/chunks/en-D58zE54i-DbqdlOqH.js.map +1 -0
- package/standalone/index.js +7911 -0
- package/standalone/index.js.map +1 -0
- package/svelte.d.ts +50 -0
- package/svelte.js +1 -0
- package/vscode.html-custom-data.json +145 -0
- package/vue.d.ts +49 -0
- package/vue.js +1 -0
package/README.md
CHANGED
|
@@ -1,3 +1,87 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Smart Sort for the web
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Smart Sort lets travellers describe what they want ("non-stop, morning departures") and
|
|
4
|
+
re-ranks the Best tab of your results page to match. It is a set of custom elements that work in
|
|
5
|
+
any framework: you keep rendering your own result cards, and Smart Sort tells you their order.
|
|
6
|
+
Your package, `@riviai/smart-sort`, already contains your API key, theme and text.
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
npm install @riviai/smart-sort
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
```html
|
|
13
|
+
<rivi-smart-sort>
|
|
14
|
+
<rivi-sort-input></rivi-sort-input>
|
|
15
|
+
<rivi-chips></rivi-chips>
|
|
16
|
+
<rivi-explain></rivi-explain>
|
|
17
|
+
<ul id="results"></ul>
|
|
18
|
+
</rivi-smart-sort>
|
|
19
|
+
<script type="module" src="./app.js"></script>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
<!-- example: test/types/dom/quickstart.js -->
|
|
23
|
+
|
|
24
|
+
```js
|
|
25
|
+
// app.js: the smallest working integration.
|
|
26
|
+
import '@riviai/smart-sort';
|
|
27
|
+
|
|
28
|
+
// Your results, as your search API returned them. `id` is the itinerary id Smart Sort ranks by.
|
|
29
|
+
const flights = [
|
|
30
|
+
{ id: 'IT-1', airline: 'Saudia', price: 820 },
|
|
31
|
+
{ id: 'IT-2', airline: 'flynas', price: 640 },
|
|
32
|
+
{ id: 'IT-3', airline: 'Emirates', price: 1210 }
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
const rivi = document.querySelector('rivi-smart-sort');
|
|
36
|
+
const list = document.querySelector('#results');
|
|
37
|
+
if (!rivi || !list) throw new Error('Add <rivi-smart-sort> and #results to the page');
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Ranked flights first, in Smart Sort's order; the others keep your order after them.
|
|
41
|
+
* @param {import('@riviai/smart-sort').RankingEntry[]} ranking
|
|
42
|
+
*/
|
|
43
|
+
const render = ranking => {
|
|
44
|
+
const rank = new Map(ranking.map(entry => [entry.id, entry.rank]));
|
|
45
|
+
const last = Number.MAX_SAFE_INTEGER;
|
|
46
|
+
const ordered = [...flights].sort((a, b) => (rank.get(a.id) ?? last) - (rank.get(b.id) ?? last));
|
|
47
|
+
list.replaceChildren(
|
|
48
|
+
...ordered.map(flight => {
|
|
49
|
+
const item = document.createElement('li');
|
|
50
|
+
item.textContent = `${flight.airline}: ${flight.price}`;
|
|
51
|
+
return item;
|
|
52
|
+
})
|
|
53
|
+
);
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
rivi.addEventListener('rivi-ranking', event => render(event.detail.ranking));
|
|
57
|
+
|
|
58
|
+
// Your search, described the way Smart Sort expects. A new search gets a new searchId.
|
|
59
|
+
/** @type {import('@riviai/smart-sort').RiviSearch} */
|
|
60
|
+
const search = {
|
|
61
|
+
product: 'flight',
|
|
62
|
+
searchId: 'your-search-id',
|
|
63
|
+
tripType: 'oneway',
|
|
64
|
+
origin: 'RUH',
|
|
65
|
+
destination: 'DXB',
|
|
66
|
+
departureDate: '2026-11-01',
|
|
67
|
+
pax: { adults: 1, children: 0, infants: 0 }
|
|
68
|
+
};
|
|
69
|
+
rivi.search = search; // objects are set as properties, never as attributes
|
|
70
|
+
|
|
71
|
+
render([]);
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Documentation
|
|
75
|
+
|
|
76
|
+
The Smart Sort documentation, from the overview and concepts to every page below, is at
|
|
77
|
+
[partner-resources.rivi.co](https://partner-resources.rivi.co/ask-ai/overview).
|
|
78
|
+
|
|
79
|
+
1. [Install](https://partner-resources.rivi.co/ask-ai/web/sdk/install): requirements, install, registering the elements.
|
|
80
|
+
2. [Quickstart](https://partner-resources.rivi.co/ask-ai/web/sdk/quickstart): the smallest page that shows a ranking.
|
|
81
|
+
3. [Integration guide](https://partner-resources.rivi.co/ask-ai/web/sdk/integration): the steps, with React, Vue, Svelte, Angular and
|
|
82
|
+
plain JavaScript examples.
|
|
83
|
+
4. [SDK reference](https://partner-resources.rivi.co/ask-ai/web/sdk/reference): every element, property, event and type, what Smart Sort
|
|
84
|
+
does on its own, timings, tokens and strings.
|
|
85
|
+
5. [Styling guide](https://partner-resources.rivi.co/ask-ai/web/sdk/styling): tokens, parts, language and direction.
|
|
86
|
+
6. [Troubleshooting](https://partner-resources.rivi.co/ask-ai/web/sdk/troubleshooting): symptoms, errors and console messages.
|
|
87
|
+
7. [From Angular](https://partner-resources.rivi.co/ask-ai/web/sdk/from-angular): moving from the legacy Angular SDK.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import '../index.js';
|
|
3
|
+
import type { RiviEnv, RiviMatchBadge, RiviPrompt, RiviPromptProps, RiviSmartSort, RiviSmartSortProps, RiviSortInput, RiviSortInputProps } from '../index.js';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/** `<rivi-smart-sort>`: report facts with inputs, hear the SDK through outputs. */
|
|
6
|
+
export declare class RiviSmartSortDirective {
|
|
7
|
+
/** The element itself, for `resolveConfirm()` or anything not covered here. */
|
|
8
|
+
readonly element: RiviSmartSort;
|
|
9
|
+
set search(value: RiviSmartSortProps['search']);
|
|
10
|
+
set sort(value: RiviSmartSortProps['sort']);
|
|
11
|
+
set stage(value: RiviSmartSortProps['stage']);
|
|
12
|
+
set filters(value: RiviSmartSortProps['filters']);
|
|
13
|
+
set pool(value: RiviSmartSortProps['pool']);
|
|
14
|
+
set visible(value: RiviSmartSortProps['visible']);
|
|
15
|
+
set metadata(value: RiviSmartSortProps['metadata']);
|
|
16
|
+
set auth(value: RiviSmartSortProps['auth']);
|
|
17
|
+
set strings(value: RiviSmartSortProps['strings']);
|
|
18
|
+
set env(value: RiviEnv);
|
|
19
|
+
set locale(value: string);
|
|
20
|
+
set currency(value: string);
|
|
21
|
+
/** Dev build only. */
|
|
22
|
+
set baseUrl(value: string | undefined);
|
|
23
|
+
readonly ranking: EventEmitter<CustomEvent<{
|
|
24
|
+
ranking: import("@riviai/smart-sort-core").RankingEntry[];
|
|
25
|
+
all: import("@riviai/smart-sort-core").RankingEntry[];
|
|
26
|
+
status: import("@riviai/smart-sort-core").RiviState["rankingStatus"];
|
|
27
|
+
}>>;
|
|
28
|
+
readonly rankingCleared: EventEmitter<CustomEvent<null>>;
|
|
29
|
+
readonly sortChange: EventEmitter<CustomEvent<{
|
|
30
|
+
sort: import("@riviai/smart-sort-core").SortMode;
|
|
31
|
+
}>>;
|
|
32
|
+
/** Cancelable: call `preventDefault()` on it, show your dialog, then `resolveConfirm()`. */
|
|
33
|
+
readonly confirmSort: EventEmitter<CustomEvent<{
|
|
34
|
+
sort: import("@riviai/smart-sort-core").SortMode;
|
|
35
|
+
}>>;
|
|
36
|
+
readonly showHidden: EventEmitter<CustomEvent<{
|
|
37
|
+
ids: string[];
|
|
38
|
+
}>>;
|
|
39
|
+
readonly error: EventEmitter<CustomEvent<import("@riviai/smart-sort-core").RiviError>>;
|
|
40
|
+
readonly focusInput: EventEmitter<CustomEvent<null>>;
|
|
41
|
+
/** Answer `rivi-confirm-sort` after showing your own dialog. */
|
|
42
|
+
resolveConfirm(accepted: boolean): void;
|
|
43
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RiviSmartSortDirective, never>;
|
|
44
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<RiviSmartSortDirective, "rivi-smart-sort", ["riviSmartSort"], { "search": { "alias": "search"; "required": false; }; "sort": { "alias": "sort"; "required": false; }; "stage": { "alias": "stage"; "required": false; }; "filters": { "alias": "filters"; "required": false; }; "pool": { "alias": "pool"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "metadata": { "alias": "metadata"; "required": false; }; "auth": { "alias": "auth"; "required": false; }; "strings": { "alias": "strings"; "required": false; }; "env": { "alias": "env"; "required": false; }; "locale": { "alias": "locale"; "required": false; }; "currency": { "alias": "currency"; "required": false; }; "baseUrl": { "alias": "base-url"; "required": false; }; }, { "ranking": "rivi-ranking"; "rankingCleared": "rivi-ranking-cleared"; "sortChange": "rivi-sort-change"; "confirmSort": "rivi-confirm-sort"; "showHidden": "rivi-show-hidden"; "error": "rivi-error"; "focusInput": "rivi-focus-input"; }, never, never, true, never>;
|
|
45
|
+
}
|
|
46
|
+
/** `<rivi-match-badge>`: `[resultId]="item.id"` or a static `result-id="…"`. */
|
|
47
|
+
export declare class RiviMatchBadgeDirective {
|
|
48
|
+
readonly element: RiviMatchBadge;
|
|
49
|
+
set resultId(value: string);
|
|
50
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RiviMatchBadgeDirective, never>;
|
|
51
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<RiviMatchBadgeDirective, "rivi-match-badge", never, { "resultId": { "alias": "resultId"; "required": false; }; }, {}, never, never, true, never>;
|
|
52
|
+
}
|
|
53
|
+
/** `<rivi-sort-input>`: `[suggestions]="examples"`, or static `heading="…"` and `icon="none"`. */
|
|
54
|
+
export declare class RiviSortInputDirective {
|
|
55
|
+
readonly element: RiviSortInput;
|
|
56
|
+
set heading(value: string);
|
|
57
|
+
set icon(value: NonNullable<RiviSortInputProps['icon']>);
|
|
58
|
+
set suggestions(value: NonNullable<RiviSortInputProps['suggestions']>);
|
|
59
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RiviSortInputDirective, never>;
|
|
60
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<RiviSortInputDirective, "rivi-sort-input", never, { "heading": { "alias": "heading"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "suggestions": { "alias": "suggestions"; "required": false; }; }, {}, never, never, true, never>;
|
|
61
|
+
}
|
|
62
|
+
/** `<rivi-prompt>`: its wording, and `(rivi-focus-input)` to show the query box yourself. */
|
|
63
|
+
export declare class RiviPromptDirective {
|
|
64
|
+
readonly element: RiviPrompt;
|
|
65
|
+
set heading(value: string);
|
|
66
|
+
set description(value: string);
|
|
67
|
+
set examples(value: NonNullable<RiviPromptProps['examples']>);
|
|
68
|
+
set icon(value: NonNullable<RiviPromptProps['icon']>);
|
|
69
|
+
/** Cancelable: call `preventDefault()` on it, then show and focus your query box. */
|
|
70
|
+
readonly focusInput: EventEmitter<CustomEvent<null>>;
|
|
71
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RiviPromptDirective, never>;
|
|
72
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<RiviPromptDirective, "rivi-prompt", never, { "heading": { "alias": "heading"; "required": false; }; "description": { "alias": "description"; "required": false; }; "examples": { "alias": "examples"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; }, { "focusInput": "rivi-focus-input"; }, never, never, true, never>;
|
|
73
|
+
}
|
|
74
|
+
/** Add to a standalone component's `imports` (or an NgModule's). */
|
|
75
|
+
export declare const RIVI_SMART_SORT: readonly [typeof RiviSmartSortDirective, typeof RiviSortInputDirective, typeof RiviPromptDirective, typeof RiviMatchBadgeDirective];
|
package/angular/index.js
ADDED
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
// Angular directives for the Smart Sort elements: `@riviai/smart-sort-<tenant>/angular`.
|
|
2
|
+
//
|
|
3
|
+
// Angular cannot type-check a custom element's bindings by itself (CUSTOM_ELEMENTS_SCHEMA accepts
|
|
4
|
+
// anything). These directives match the same tags, so with strict templates `[search]`, `[sort]`
|
|
5
|
+
// and `(rivi-ranking)` are checked against the SDK's types. Each input writes the element property.
|
|
6
|
+
// The outputs exist only to type `$event`: they never emit. For `(rivi-ranking)` on an element,
|
|
7
|
+
// Angular adds a native DOM listener *and* subscribes to a directive output of the same name, so an
|
|
8
|
+
// output that re-emitted the DOM event would call the handler twice. The handler receives the
|
|
9
|
+
// element's own event, so `preventDefault()` works.
|
|
10
|
+
// Importing this file also registers the elements.
|
|
11
|
+
//
|
|
12
|
+
// Compiled with the Angular compiler in partial mode (scripts/build-extras.ts), not by Vite.
|
|
13
|
+
import { Directive, ElementRef, EventEmitter, inject, Input, Output } from '@angular/core';
|
|
14
|
+
import '../index.js';
|
|
15
|
+
import * as i0 from "@angular/core";
|
|
16
|
+
/** `<rivi-smart-sort>`: report facts with inputs, hear the SDK through outputs. */
|
|
17
|
+
export class RiviSmartSortDirective {
|
|
18
|
+
/** The element itself, for `resolveConfirm()` or anything not covered here. */
|
|
19
|
+
element = inject(ElementRef).nativeElement;
|
|
20
|
+
set search(value) {
|
|
21
|
+
this.element.search = value;
|
|
22
|
+
}
|
|
23
|
+
set sort(value) {
|
|
24
|
+
this.element.sort = value;
|
|
25
|
+
}
|
|
26
|
+
set stage(value) {
|
|
27
|
+
this.element.stage = value;
|
|
28
|
+
}
|
|
29
|
+
set filters(value) {
|
|
30
|
+
this.element.filters = value;
|
|
31
|
+
}
|
|
32
|
+
set pool(value) {
|
|
33
|
+
this.element.pool = value;
|
|
34
|
+
}
|
|
35
|
+
set visible(value) {
|
|
36
|
+
this.element.visible = value;
|
|
37
|
+
}
|
|
38
|
+
set metadata(value) {
|
|
39
|
+
this.element.metadata = value;
|
|
40
|
+
}
|
|
41
|
+
set auth(value) {
|
|
42
|
+
this.element.auth = value;
|
|
43
|
+
}
|
|
44
|
+
set strings(value) {
|
|
45
|
+
this.element.strings = value;
|
|
46
|
+
}
|
|
47
|
+
set env(value) {
|
|
48
|
+
this.element.env = value;
|
|
49
|
+
}
|
|
50
|
+
set locale(value) {
|
|
51
|
+
this.element.locale = value;
|
|
52
|
+
}
|
|
53
|
+
set currency(value) {
|
|
54
|
+
this.element.currency = value;
|
|
55
|
+
}
|
|
56
|
+
/** Dev build only. */
|
|
57
|
+
set baseUrl(value) {
|
|
58
|
+
this.element.baseUrl = value;
|
|
59
|
+
}
|
|
60
|
+
ranking = new EventEmitter();
|
|
61
|
+
rankingCleared = new EventEmitter();
|
|
62
|
+
sortChange = new EventEmitter();
|
|
63
|
+
/** Cancelable: call `preventDefault()` on it, show your dialog, then `resolveConfirm()`. */
|
|
64
|
+
confirmSort = new EventEmitter();
|
|
65
|
+
showHidden = new EventEmitter();
|
|
66
|
+
error = new EventEmitter();
|
|
67
|
+
focusInput = new EventEmitter();
|
|
68
|
+
/** Answer `rivi-confirm-sort` after showing your own dialog. */
|
|
69
|
+
resolveConfirm(accepted) {
|
|
70
|
+
this.element.resolveConfirm(accepted);
|
|
71
|
+
}
|
|
72
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.2", ngImport: i0, type: RiviSmartSortDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
73
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.2.2", type: RiviSmartSortDirective, isStandalone: true, selector: "rivi-smart-sort", inputs: { search: "search", sort: "sort", stage: "stage", filters: "filters", pool: "pool", visible: "visible", metadata: "metadata", auth: "auth", strings: "strings", env: "env", locale: "locale", currency: "currency", baseUrl: ["base-url", "baseUrl"] }, outputs: { ranking: "rivi-ranking", rankingCleared: "rivi-ranking-cleared", sortChange: "rivi-sort-change", confirmSort: "rivi-confirm-sort", showHidden: "rivi-show-hidden", error: "rivi-error", focusInput: "rivi-focus-input" }, exportAs: ["riviSmartSort"], ngImport: i0 });
|
|
74
|
+
}
|
|
75
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.2", ngImport: i0, type: RiviSmartSortDirective, decorators: [{
|
|
76
|
+
type: Directive,
|
|
77
|
+
args: [{ selector: 'rivi-smart-sort', standalone: true, exportAs: 'riviSmartSort' }]
|
|
78
|
+
}], propDecorators: { search: [{
|
|
79
|
+
type: Input
|
|
80
|
+
}], sort: [{
|
|
81
|
+
type: Input
|
|
82
|
+
}], stage: [{
|
|
83
|
+
type: Input
|
|
84
|
+
}], filters: [{
|
|
85
|
+
type: Input
|
|
86
|
+
}], pool: [{
|
|
87
|
+
type: Input
|
|
88
|
+
}], visible: [{
|
|
89
|
+
type: Input
|
|
90
|
+
}], metadata: [{
|
|
91
|
+
type: Input
|
|
92
|
+
}], auth: [{
|
|
93
|
+
type: Input
|
|
94
|
+
}], strings: [{
|
|
95
|
+
type: Input
|
|
96
|
+
}], env: [{
|
|
97
|
+
type: Input
|
|
98
|
+
}], locale: [{
|
|
99
|
+
type: Input
|
|
100
|
+
}], currency: [{
|
|
101
|
+
type: Input
|
|
102
|
+
}], baseUrl: [{
|
|
103
|
+
type: Input,
|
|
104
|
+
args: ['base-url']
|
|
105
|
+
}], ranking: [{
|
|
106
|
+
type: Output,
|
|
107
|
+
args: ['rivi-ranking']
|
|
108
|
+
}], rankingCleared: [{
|
|
109
|
+
type: Output,
|
|
110
|
+
args: ['rivi-ranking-cleared']
|
|
111
|
+
}], sortChange: [{
|
|
112
|
+
type: Output,
|
|
113
|
+
args: ['rivi-sort-change']
|
|
114
|
+
}], confirmSort: [{
|
|
115
|
+
type: Output,
|
|
116
|
+
args: ['rivi-confirm-sort']
|
|
117
|
+
}], showHidden: [{
|
|
118
|
+
type: Output,
|
|
119
|
+
args: ['rivi-show-hidden']
|
|
120
|
+
}], error: [{
|
|
121
|
+
type: Output,
|
|
122
|
+
args: ['rivi-error']
|
|
123
|
+
}], focusInput: [{
|
|
124
|
+
type: Output,
|
|
125
|
+
args: ['rivi-focus-input']
|
|
126
|
+
}] } });
|
|
127
|
+
/** `<rivi-match-badge>`: `[resultId]="item.id"` or a static `result-id="…"`. */
|
|
128
|
+
export class RiviMatchBadgeDirective {
|
|
129
|
+
element = inject(ElementRef).nativeElement;
|
|
130
|
+
set resultId(value) {
|
|
131
|
+
this.element.resultId = value;
|
|
132
|
+
}
|
|
133
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.2", ngImport: i0, type: RiviMatchBadgeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
134
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.2.2", type: RiviMatchBadgeDirective, isStandalone: true, selector: "rivi-match-badge", inputs: { resultId: "resultId" }, ngImport: i0 });
|
|
135
|
+
}
|
|
136
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.2", ngImport: i0, type: RiviMatchBadgeDirective, decorators: [{
|
|
137
|
+
type: Directive,
|
|
138
|
+
args: [{ selector: 'rivi-match-badge', standalone: true }]
|
|
139
|
+
}], propDecorators: { resultId: [{
|
|
140
|
+
type: Input
|
|
141
|
+
}] } });
|
|
142
|
+
/** `<rivi-sort-input>`: `[suggestions]="examples"`, or static `heading="…"` and `icon="none"`. */
|
|
143
|
+
export class RiviSortInputDirective {
|
|
144
|
+
element = inject(ElementRef).nativeElement;
|
|
145
|
+
set heading(value) {
|
|
146
|
+
this.element.heading = value;
|
|
147
|
+
}
|
|
148
|
+
set icon(value) {
|
|
149
|
+
this.element.icon = value;
|
|
150
|
+
}
|
|
151
|
+
set suggestions(value) {
|
|
152
|
+
this.element.suggestions = value;
|
|
153
|
+
}
|
|
154
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.2", ngImport: i0, type: RiviSortInputDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
155
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.2.2", type: RiviSortInputDirective, isStandalone: true, selector: "rivi-sort-input", inputs: { heading: "heading", icon: "icon", suggestions: "suggestions" }, ngImport: i0 });
|
|
156
|
+
}
|
|
157
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.2", ngImport: i0, type: RiviSortInputDirective, decorators: [{
|
|
158
|
+
type: Directive,
|
|
159
|
+
args: [{ selector: 'rivi-sort-input', standalone: true }]
|
|
160
|
+
}], propDecorators: { heading: [{
|
|
161
|
+
type: Input
|
|
162
|
+
}], icon: [{
|
|
163
|
+
type: Input
|
|
164
|
+
}], suggestions: [{
|
|
165
|
+
type: Input
|
|
166
|
+
}] } });
|
|
167
|
+
/** `<rivi-prompt>`: its wording, and `(rivi-focus-input)` to show the query box yourself. */
|
|
168
|
+
export class RiviPromptDirective {
|
|
169
|
+
element = inject(ElementRef).nativeElement;
|
|
170
|
+
set heading(value) {
|
|
171
|
+
this.element.heading = value;
|
|
172
|
+
}
|
|
173
|
+
set description(value) {
|
|
174
|
+
this.element.description = value;
|
|
175
|
+
}
|
|
176
|
+
set examples(value) {
|
|
177
|
+
this.element.examples = value;
|
|
178
|
+
}
|
|
179
|
+
set icon(value) {
|
|
180
|
+
this.element.icon = value;
|
|
181
|
+
}
|
|
182
|
+
/** Cancelable: call `preventDefault()` on it, then show and focus your query box. */
|
|
183
|
+
focusInput = new EventEmitter();
|
|
184
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.2", ngImport: i0, type: RiviPromptDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
185
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.2.2", type: RiviPromptDirective, isStandalone: true, selector: "rivi-prompt", inputs: { heading: "heading", description: "description", examples: "examples", icon: "icon" }, outputs: { focusInput: "rivi-focus-input" }, ngImport: i0 });
|
|
186
|
+
}
|
|
187
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.2", ngImport: i0, type: RiviPromptDirective, decorators: [{
|
|
188
|
+
type: Directive,
|
|
189
|
+
args: [{ selector: 'rivi-prompt', standalone: true }]
|
|
190
|
+
}], propDecorators: { heading: [{
|
|
191
|
+
type: Input
|
|
192
|
+
}], description: [{
|
|
193
|
+
type: Input
|
|
194
|
+
}], examples: [{
|
|
195
|
+
type: Input
|
|
196
|
+
}], icon: [{
|
|
197
|
+
type: Input
|
|
198
|
+
}], focusInput: [{
|
|
199
|
+
type: Output,
|
|
200
|
+
args: ['rivi-focus-input']
|
|
201
|
+
}] } });
|
|
202
|
+
/** Add to a standalone component's `imports` (or an NgModule's). */
|
|
203
|
+
export const RIVI_SMART_SORT = [
|
|
204
|
+
RiviSmartSortDirective,
|
|
205
|
+
RiviSortInputDirective,
|
|
206
|
+
RiviPromptDirective,
|
|
207
|
+
RiviMatchBadgeDirective
|
|
208
|
+
];
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
//#region ../smart-sort-core/dist/ar-DOxT_9p7.js
|
|
2
|
+
var e = {
|
|
3
|
+
rulesVersion: 1,
|
|
4
|
+
locale: "ar",
|
|
5
|
+
messages: {
|
|
6
|
+
"chip.airlineExcluded": "شركة الطيران غير المفضلة: {value}",
|
|
7
|
+
"chip.tripDuration": "مدة الرحلة: {value}",
|
|
8
|
+
"chip.departure": "المغادرة: {value}",
|
|
9
|
+
"chip.arrival": "الوصول: {value}",
|
|
10
|
+
"chip.return": "العودة: {value}",
|
|
11
|
+
"chip.stops": "{n, plural, =0 {مباشر} one {محطة واحدة} two {محطتان} few {# محطات} many {# محطة} other {# محطة}}",
|
|
12
|
+
"chip.flightDuration": "مدة الطيران: {value}",
|
|
13
|
+
"chip.layoverAt": "مرور في: {value}",
|
|
14
|
+
"chip.layoverExcluded": "توقف غير مفضل: {value}",
|
|
15
|
+
"chip.layoverDuration": "مدة المرور: {value}",
|
|
16
|
+
"chip.baggageWeight": "وزن الحقيبة: {value}",
|
|
17
|
+
"chip.budget": "الميزانية: {value}",
|
|
18
|
+
"chip.inPolicy": "ضمن السياسة فقط",
|
|
19
|
+
"chip.departureAirport": "مطار المغادرة: {value}",
|
|
20
|
+
"chip.arrivalAirport": "مطار الوصول: {value}",
|
|
21
|
+
"chip.departureAirportExcluded": "مطار المغادرة غير مفضل: {value}",
|
|
22
|
+
"chip.arrivalAirportExcluded": "مطار الوصول غير مفضل: {value}",
|
|
23
|
+
"chip.stars": "{n, plural, =0 {بدون تقييم} one {نجمة واحدة} two {نجمتان} few {# نجوم} many {# نجمة} other {# نجمة}}",
|
|
24
|
+
"chip.userRating": "تقييم المستخدم: {value}",
|
|
25
|
+
"chip.accommodationType": "نوع الإقامة: {value}",
|
|
26
|
+
"chip.near": "قريب من: {value}",
|
|
27
|
+
"chip.avoidOvernight": "تجنب التوقف الليلي",
|
|
28
|
+
"chip.hotelExcluded": "فندق غير مفضل: {value}",
|
|
29
|
+
"chip.locationExcluded": "موقع غير مفضل: {value}",
|
|
30
|
+
"chip.brandExcluded": "علامة تجارية غير مفضلة: {value}",
|
|
31
|
+
"chip.amenityExcluded": "مرفق غير مفضل: {value}",
|
|
32
|
+
"chip.accommodationTypeExcluded": "نوع إقامة غير مفضل: {value}",
|
|
33
|
+
"chip.roomTypeExcluded": "نوع غرفة غير مفضل: {value}",
|
|
34
|
+
"chip.stayPreferenceExcluded": "غير مفضل: {value}",
|
|
35
|
+
"sortInput.placeholder": "اسألني أي شيء...",
|
|
36
|
+
"sortInput.submit": "اسأل",
|
|
37
|
+
"sortInput.loading": "جاري البحث...",
|
|
38
|
+
"sortInput.retry": "حاول مرة أخرى",
|
|
39
|
+
"sortInput.clearAll": "مسح الكل",
|
|
40
|
+
"sortInput.description.flight": "شارك تفضيلاتك. سيرتّب الذكاء الاصطناعي الرحلات ويشرح المفاضلات بينها.",
|
|
41
|
+
"sortInput.description.hotel": "شارك تفضيلاتك. سيرتّب الذكاء الاصطناعي الفنادق ويشرح المفاضلات بينها.",
|
|
42
|
+
"error.network": "خطأ في الاتصال. يرجى المحاولة مرة أخرى.",
|
|
43
|
+
"error.auth": "الفرز الذكي غير متاح حالياً. يرجى المحاولة لاحقاً.",
|
|
44
|
+
"error.timeout": "انتهت مهلة الطلب. يرجى المحاولة مرة أخرى.",
|
|
45
|
+
"error.stream": "انقطع الاتصال بالنتائج المباشرة. يرجى المحاولة مرة أخرى.",
|
|
46
|
+
"error.server": "حدث خطأ. يرجى المحاولة مرة أخرى.",
|
|
47
|
+
"chips.clearAll": "مسح الكل",
|
|
48
|
+
"chips.remove": "إزالة {label}",
|
|
49
|
+
"explain.loading": "جارٍ شرح أفضل الخيارات...",
|
|
50
|
+
"explain.title.flight": "لماذا نوصي بهذه الرحلات",
|
|
51
|
+
"explain.title.hotel": "لماذا نوصي بهذه الفنادق",
|
|
52
|
+
"explain.collapse": "إخفاء الشرح",
|
|
53
|
+
"explain.expand": "عرض الشرح",
|
|
54
|
+
"explain.fallback": "قد لا تتطابق بعض النتائج مع جميع تفضيلاتك",
|
|
55
|
+
"explain.refreshing": "جارٍ تحديث الشرح للنتائج الجديدة",
|
|
56
|
+
"explain.hiddenMatches.flight": "قد تُخفي الفلاتر بعض الرحلات الموصى بها.",
|
|
57
|
+
"explain.hiddenMatches.hotel": "قد تُخفي الفلاتر بعض الفنادق الموصى بها.",
|
|
58
|
+
"explain.clearFilters": "مسح الفلاتر",
|
|
59
|
+
"explain.edit": "تعديل",
|
|
60
|
+
"prompt.flight.example1": "رحلة مباشرة تصل قبل الظهر",
|
|
61
|
+
"prompt.flight.example2": "الأرخص دون رحلات ليلية",
|
|
62
|
+
"prompt.flight.example3": "توقفات قصيرة وبدون مبيت",
|
|
63
|
+
"prompt.flight.example4": "أفضّل السعودية ما لم تكن أغلى بكثير",
|
|
64
|
+
"prompt.flight.example5": "مغادرة صباحية مع أمتعة مسجلة",
|
|
65
|
+
"prompt.hotel.example1": "4 نجوم أو أكثر وقريب من الشاطئ",
|
|
66
|
+
"prompt.hotel.example2": "إلغاء مجاني مع إفطار مشمول",
|
|
67
|
+
"prompt.hotel.example3": "على مسافة مشي من المترو",
|
|
68
|
+
"prompt.hotel.example4": "تقييمات ممتازة بأقل من 200 دولار لليلة",
|
|
69
|
+
"prompt.hotel.example5": "مناسب للعائلات مع مسبح",
|
|
70
|
+
"confirm.sort.title": "هل تريد مسح استعلام الفرز الذكي؟",
|
|
71
|
+
"confirm.sort.body": "سيؤدي تغيير الترتيب إلى مسح استعلام الفرز الذكي. هل تريد المتابعة؟",
|
|
72
|
+
"confirm.sort.accept": "متابعة",
|
|
73
|
+
"confirm.sort.cancel": "إلغاء",
|
|
74
|
+
"spotlight.title": "صف رحلتك المثالية",
|
|
75
|
+
"spotlight.body": "يرتّب الذكاء الاصطناعي النتائج حسب تفضيلاتك، دون استبعاد أي نتيجة.",
|
|
76
|
+
"spotlight.dismiss": "دعنا نبدأ!",
|
|
77
|
+
"bestInfo.label": "حول ترتيب الأفضل",
|
|
78
|
+
"bestInfo.body": "يتم اختيار أفضل نتيجة للصلة العامة، مع موازنة تفضيلاتك مع السعر والتوفر.",
|
|
79
|
+
"badge.partial": "مطابقة جزئية",
|
|
80
|
+
"badge.tooltip": "لا تطابق هذه النتيجة جميع تفضيلاتك"
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
//#endregion
|
|
84
|
+
export { e as default };
|
|
85
|
+
|
|
86
|
+
//# sourceMappingURL=ar-DOxT_9p7-xb81ZNgj.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ar-DOxT_9p7-xb81ZNgj.js","names":[],"sources":["../../../../smart-sort-core/dist/ar-DOxT_9p7.js"],"sourcesContent":["var e = {\n\trulesVersion: 1,\n\tlocale: \"ar\",\n\tmessages: {\n\t\t\"chip.airlineExcluded\": \"شركة الطيران غير المفضلة: {value}\",\n\t\t\"chip.tripDuration\": \"مدة الرحلة: {value}\",\n\t\t\"chip.departure\": \"المغادرة: {value}\",\n\t\t\"chip.arrival\": \"الوصول: {value}\",\n\t\t\"chip.return\": \"العودة: {value}\",\n\t\t\"chip.stops\": \"{n, plural, =0 {مباشر} one {محطة واحدة} two {محطتان} few {# محطات} many {# محطة} other {# محطة}}\",\n\t\t\"chip.flightDuration\": \"مدة الطيران: {value}\",\n\t\t\"chip.layoverAt\": \"مرور في: {value}\",\n\t\t\"chip.layoverExcluded\": \"توقف غير مفضل: {value}\",\n\t\t\"chip.layoverDuration\": \"مدة المرور: {value}\",\n\t\t\"chip.baggageWeight\": \"وزن الحقيبة: {value}\",\n\t\t\"chip.budget\": \"الميزانية: {value}\",\n\t\t\"chip.inPolicy\": \"ضمن السياسة فقط\",\n\t\t\"chip.departureAirport\": \"مطار المغادرة: {value}\",\n\t\t\"chip.arrivalAirport\": \"مطار الوصول: {value}\",\n\t\t\"chip.departureAirportExcluded\": \"مطار المغادرة غير مفضل: {value}\",\n\t\t\"chip.arrivalAirportExcluded\": \"مطار الوصول غير مفضل: {value}\",\n\t\t\"chip.stars\": \"{n, plural, =0 {بدون تقييم} one {نجمة واحدة} two {نجمتان} few {# نجوم} many {# نجمة} other {# نجمة}}\",\n\t\t\"chip.userRating\": \"تقييم المستخدم: {value}\",\n\t\t\"chip.accommodationType\": \"نوع الإقامة: {value}\",\n\t\t\"chip.near\": \"قريب من: {value}\",\n\t\t\"chip.avoidOvernight\": \"تجنب التوقف الليلي\",\n\t\t\"chip.hotelExcluded\": \"فندق غير مفضل: {value}\",\n\t\t\"chip.locationExcluded\": \"موقع غير مفضل: {value}\",\n\t\t\"chip.brandExcluded\": \"علامة تجارية غير مفضلة: {value}\",\n\t\t\"chip.amenityExcluded\": \"مرفق غير مفضل: {value}\",\n\t\t\"chip.accommodationTypeExcluded\": \"نوع إقامة غير مفضل: {value}\",\n\t\t\"chip.roomTypeExcluded\": \"نوع غرفة غير مفضل: {value}\",\n\t\t\"chip.stayPreferenceExcluded\": \"غير مفضل: {value}\",\n\t\t\"sortInput.placeholder\": \"اسألني أي شيء...\",\n\t\t\"sortInput.submit\": \"اسأل\",\n\t\t\"sortInput.loading\": \"جاري البحث...\",\n\t\t\"sortInput.retry\": \"حاول مرة أخرى\",\n\t\t\"sortInput.clearAll\": \"مسح الكل\",\n\t\t\"sortInput.description.flight\": \"شارك تفضيلاتك. سيرتّب الذكاء الاصطناعي الرحلات ويشرح المفاضلات بينها.\",\n\t\t\"sortInput.description.hotel\": \"شارك تفضيلاتك. سيرتّب الذكاء الاصطناعي الفنادق ويشرح المفاضلات بينها.\",\n\t\t\"error.network\": \"خطأ في الاتصال. يرجى المحاولة مرة أخرى.\",\n\t\t\"error.auth\": \"الفرز الذكي غير متاح حالياً. يرجى المحاولة لاحقاً.\",\n\t\t\"error.timeout\": \"انتهت مهلة الطلب. يرجى المحاولة مرة أخرى.\",\n\t\t\"error.stream\": \"انقطع الاتصال بالنتائج المباشرة. يرجى المحاولة مرة أخرى.\",\n\t\t\"error.server\": \"حدث خطأ. يرجى المحاولة مرة أخرى.\",\n\t\t\"chips.clearAll\": \"مسح الكل\",\n\t\t\"chips.remove\": \"إزالة {label}\",\n\t\t\"explain.loading\": \"جارٍ شرح أفضل الخيارات...\",\n\t\t\"explain.title.flight\": \"لماذا نوصي بهذه الرحلات\",\n\t\t\"explain.title.hotel\": \"لماذا نوصي بهذه الفنادق\",\n\t\t\"explain.collapse\": \"إخفاء الشرح\",\n\t\t\"explain.expand\": \"عرض الشرح\",\n\t\t\"explain.fallback\": \"قد لا تتطابق بعض النتائج مع جميع تفضيلاتك\",\n\t\t\"explain.refreshing\": \"جارٍ تحديث الشرح للنتائج الجديدة\",\n\t\t\"explain.hiddenMatches.flight\": \"قد تُخفي الفلاتر بعض الرحلات الموصى بها.\",\n\t\t\"explain.hiddenMatches.hotel\": \"قد تُخفي الفلاتر بعض الفنادق الموصى بها.\",\n\t\t\"explain.clearFilters\": \"مسح الفلاتر\",\n\t\t\"explain.edit\": \"تعديل\",\n\t\t\"prompt.flight.example1\": \"رحلة مباشرة تصل قبل الظهر\",\n\t\t\"prompt.flight.example2\": \"الأرخص دون رحلات ليلية\",\n\t\t\"prompt.flight.example3\": \"توقفات قصيرة وبدون مبيت\",\n\t\t\"prompt.flight.example4\": \"أفضّل السعودية ما لم تكن أغلى بكثير\",\n\t\t\"prompt.flight.example5\": \"مغادرة صباحية مع أمتعة مسجلة\",\n\t\t\"prompt.hotel.example1\": \"4 نجوم أو أكثر وقريب من الشاطئ\",\n\t\t\"prompt.hotel.example2\": \"إلغاء مجاني مع إفطار مشمول\",\n\t\t\"prompt.hotel.example3\": \"على مسافة مشي من المترو\",\n\t\t\"prompt.hotel.example4\": \"تقييمات ممتازة بأقل من 200 دولار لليلة\",\n\t\t\"prompt.hotel.example5\": \"مناسب للعائلات مع مسبح\",\n\t\t\"confirm.sort.title\": \"هل تريد مسح استعلام الفرز الذكي؟\",\n\t\t\"confirm.sort.body\": \"سيؤدي تغيير الترتيب إلى مسح استعلام الفرز الذكي. هل تريد المتابعة؟\",\n\t\t\"confirm.sort.accept\": \"متابعة\",\n\t\t\"confirm.sort.cancel\": \"إلغاء\",\n\t\t\"spotlight.title\": \"صف رحلتك المثالية\",\n\t\t\"spotlight.body\": \"يرتّب الذكاء الاصطناعي النتائج حسب تفضيلاتك، دون استبعاد أي نتيجة.\",\n\t\t\"spotlight.dismiss\": \"دعنا نبدأ!\",\n\t\t\"bestInfo.label\": \"حول ترتيب الأفضل\",\n\t\t\"bestInfo.body\": \"يتم اختيار أفضل نتيجة للصلة العامة، مع موازنة تفضيلاتك مع السعر والتوفر.\",\n\t\t\"badge.partial\": \"مطابقة جزئية\",\n\t\t\"badge.tooltip\": \"لا تطابق هذه النتيجة جميع تفضيلاتك\"\n\t}\n};\n//#endregion\nexport { e as default };\n\n//# sourceMappingURL=ar-DOxT_9p7.js.map"],"mappings":";AAAA,IAAI,IAAI;CACP,cAAc;CACd,QAAQ;CACR,UAAU;EACT,wBAAwB;EACxB,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,eAAe;EACf,cAAc;EACd,uBAAuB;EACvB,kBAAkB;EAClB,wBAAwB;EACxB,wBAAwB;EACxB,sBAAsB;EACtB,eAAe;EACf,iBAAiB;EACjB,yBAAyB;EACzB,uBAAuB;EACvB,iCAAiC;EACjC,+BAA+B;EAC/B,cAAc;EACd,mBAAmB;EACnB,0BAA0B;EAC1B,aAAa;EACb,uBAAuB;EACvB,sBAAsB;EACtB,yBAAyB;EACzB,sBAAsB;EACtB,wBAAwB;EACxB,kCAAkC;EAClC,yBAAyB;EACzB,+BAA+B;EAC/B,yBAAyB;EACzB,oBAAoB;EACpB,qBAAqB;EACrB,mBAAmB;EACnB,sBAAsB;EACtB,gCAAgC;EAChC,+BAA+B;EAC/B,iBAAiB;EACjB,cAAc;EACd,iBAAiB;EACjB,gBAAgB;EAChB,gBAAgB;EAChB,kBAAkB;EAClB,gBAAgB;EAChB,mBAAmB;EACnB,wBAAwB;EACxB,uBAAuB;EACvB,oBAAoB;EACpB,kBAAkB;EAClB,oBAAoB;EACpB,sBAAsB;EACtB,gCAAgC;EAChC,+BAA+B;EAC/B,wBAAwB;EACxB,gBAAgB;EAChB,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;EAC1B,yBAAyB;EACzB,yBAAyB;EACzB,yBAAyB;EACzB,yBAAyB;EACzB,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,uBAAuB;EACvB,uBAAuB;EACvB,mBAAmB;EACnB,kBAAkB;EAClB,qBAAqB;EACrB,kBAAkB;EAClB,iBAAiB;EACjB,iBAAiB;EACjB,iBAAiB;CAClB;AACD"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
//#region ../smart-sort-core/dist/en-D58zE54i.js
|
|
2
|
+
var e = {
|
|
3
|
+
rulesVersion: 1,
|
|
4
|
+
locale: "en",
|
|
5
|
+
messages: {
|
|
6
|
+
"chip.airlineExcluded": "Not preferred airline: {value}",
|
|
7
|
+
"chip.tripDuration": "Trip duration: {value}",
|
|
8
|
+
"chip.departure": "Departure: {value}",
|
|
9
|
+
"chip.arrival": "Arrival: {value}",
|
|
10
|
+
"chip.return": "Return: {value}",
|
|
11
|
+
"chip.stops": "{n, plural, =0 {Non-stop} one {# stop} other {# stops}}",
|
|
12
|
+
"chip.flightDuration": "Flight duration: {value}",
|
|
13
|
+
"chip.layoverAt": "Layover at {value}",
|
|
14
|
+
"chip.layoverExcluded": "Not preferred layover: {value}",
|
|
15
|
+
"chip.layoverDuration": "Layover duration: {value}",
|
|
16
|
+
"chip.baggageWeight": "Baggage weight: {value}",
|
|
17
|
+
"chip.budget": "Budget: {value}",
|
|
18
|
+
"chip.inPolicy": "In policy only",
|
|
19
|
+
"chip.departureAirport": "Departure airport: {value}",
|
|
20
|
+
"chip.arrivalAirport": "Arrival airport: {value}",
|
|
21
|
+
"chip.departureAirportExcluded": "Not preferred departure airport: {value}",
|
|
22
|
+
"chip.arrivalAirportExcluded": "Not preferred arrival airport: {value}",
|
|
23
|
+
"chip.stars": "{n, plural, =0 {No rating} one {# star} other {# stars}}",
|
|
24
|
+
"chip.userRating": "User rating: {value}",
|
|
25
|
+
"chip.accommodationType": "Accommodation type: {value}",
|
|
26
|
+
"chip.near": "Near {value}",
|
|
27
|
+
"chip.avoidOvernight": "Avoid overnight layover",
|
|
28
|
+
"chip.hotelExcluded": "Not preferred hotel: {value}",
|
|
29
|
+
"chip.locationExcluded": "Not preferred location: {value}",
|
|
30
|
+
"chip.brandExcluded": "Not preferred brand: {value}",
|
|
31
|
+
"chip.amenityExcluded": "Not preferred amenity: {value}",
|
|
32
|
+
"chip.accommodationTypeExcluded": "Not preferred accommodation type: {value}",
|
|
33
|
+
"chip.roomTypeExcluded": "Not preferred room type: {value}",
|
|
34
|
+
"chip.stayPreferenceExcluded": "Not preferred: {value}",
|
|
35
|
+
"sortInput.placeholder": "Ask me anything...",
|
|
36
|
+
"sortInput.submit": "Ask",
|
|
37
|
+
"sortInput.loading": "Searching...",
|
|
38
|
+
"sortInput.retry": "Try again",
|
|
39
|
+
"sortInput.clearAll": "Clear All",
|
|
40
|
+
"sortInput.description.flight": "Share your preferences. AI will rank flights and explain the trade-offs.",
|
|
41
|
+
"sortInput.description.hotel": "Share your preferences. AI will rank hotels and explain the trade-offs.",
|
|
42
|
+
"error.network": "Connection error. Please try again.",
|
|
43
|
+
"error.auth": "Smart sort is unavailable right now. Please try again later.",
|
|
44
|
+
"error.timeout": "Request timed out. Please try again.",
|
|
45
|
+
"error.stream": "Lost the connection to live results. Please try again.",
|
|
46
|
+
"error.server": "An error occurred. Please try again.",
|
|
47
|
+
"chips.clearAll": "Clear all",
|
|
48
|
+
"chips.remove": "Remove {label}",
|
|
49
|
+
"explain.loading": "Explaining top picks...",
|
|
50
|
+
"explain.title.flight": "Why these flights are recommended",
|
|
51
|
+
"explain.title.hotel": "Why these hotels are recommended",
|
|
52
|
+
"explain.collapse": "Hide the explanation",
|
|
53
|
+
"explain.expand": "Show the explanation",
|
|
54
|
+
"explain.fallback": "Some results may not match all your preferences",
|
|
55
|
+
"explain.refreshing": "Updating the explanation for new results",
|
|
56
|
+
"explain.hiddenMatches.flight": "Your filters may be hiding some recommended flights.",
|
|
57
|
+
"explain.hiddenMatches.hotel": "Your filters may be hiding some recommended hotels.",
|
|
58
|
+
"explain.clearFilters": "Clear Filters",
|
|
59
|
+
"explain.edit": "Edit",
|
|
60
|
+
"prompt.flight.example1": "Non-stop, landing before noon",
|
|
61
|
+
"prompt.flight.example2": "Cheapest option without a red-eye",
|
|
62
|
+
"prompt.flight.example3": "Short layovers, no overnight stops",
|
|
63
|
+
"prompt.flight.example4": "Prefer Saudia unless it costs much more",
|
|
64
|
+
"prompt.flight.example5": "Morning departure with checked baggage",
|
|
65
|
+
"prompt.hotel.example1": "4 stars or more, close to the beach",
|
|
66
|
+
"prompt.hotel.example2": "Free cancellation with breakfast included",
|
|
67
|
+
"prompt.hotel.example3": "Walking distance to the metro",
|
|
68
|
+
"prompt.hotel.example4": "Great reviews under $200 a night",
|
|
69
|
+
"prompt.hotel.example5": "Family-friendly with a pool",
|
|
70
|
+
"confirm.sort.title": "Clear your Smart Sort query?",
|
|
71
|
+
"confirm.sort.body": "Changing the sort will clear your Smart Sort query. Do you want to continue?",
|
|
72
|
+
"confirm.sort.accept": "Continue",
|
|
73
|
+
"confirm.sort.cancel": "Cancel",
|
|
74
|
+
"spotlight.title": "Describe your ideal trip",
|
|
75
|
+
"spotlight.body": "AI sorts the results to put your preferences first, without filtering anything out.",
|
|
76
|
+
"spotlight.dismiss": "Let’s go!",
|
|
77
|
+
"bestInfo.label": "About Best sort",
|
|
78
|
+
"bestInfo.body": "The best result is chosen for overall relevance, balancing your preferences with price and availability.",
|
|
79
|
+
"badge.partial": "Partial match",
|
|
80
|
+
"badge.tooltip": "This result doesn’t match all of your preferences"
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
//#endregion
|
|
84
|
+
export { e as default };
|
|
85
|
+
|
|
86
|
+
//# sourceMappingURL=en-D58zE54i-DbqdlOqH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"en-D58zE54i-DbqdlOqH.js","names":[],"sources":["../../../../smart-sort-core/dist/en-D58zE54i.js"],"sourcesContent":["var e = {\n\trulesVersion: 1,\n\tlocale: \"en\",\n\tmessages: {\n\t\t\"chip.airlineExcluded\": \"Not preferred airline: {value}\",\n\t\t\"chip.tripDuration\": \"Trip duration: {value}\",\n\t\t\"chip.departure\": \"Departure: {value}\",\n\t\t\"chip.arrival\": \"Arrival: {value}\",\n\t\t\"chip.return\": \"Return: {value}\",\n\t\t\"chip.stops\": \"{n, plural, =0 {Non-stop} one {# stop} other {# stops}}\",\n\t\t\"chip.flightDuration\": \"Flight duration: {value}\",\n\t\t\"chip.layoverAt\": \"Layover at {value}\",\n\t\t\"chip.layoverExcluded\": \"Not preferred layover: {value}\",\n\t\t\"chip.layoverDuration\": \"Layover duration: {value}\",\n\t\t\"chip.baggageWeight\": \"Baggage weight: {value}\",\n\t\t\"chip.budget\": \"Budget: {value}\",\n\t\t\"chip.inPolicy\": \"In policy only\",\n\t\t\"chip.departureAirport\": \"Departure airport: {value}\",\n\t\t\"chip.arrivalAirport\": \"Arrival airport: {value}\",\n\t\t\"chip.departureAirportExcluded\": \"Not preferred departure airport: {value}\",\n\t\t\"chip.arrivalAirportExcluded\": \"Not preferred arrival airport: {value}\",\n\t\t\"chip.stars\": \"{n, plural, =0 {No rating} one {# star} other {# stars}}\",\n\t\t\"chip.userRating\": \"User rating: {value}\",\n\t\t\"chip.accommodationType\": \"Accommodation type: {value}\",\n\t\t\"chip.near\": \"Near {value}\",\n\t\t\"chip.avoidOvernight\": \"Avoid overnight layover\",\n\t\t\"chip.hotelExcluded\": \"Not preferred hotel: {value}\",\n\t\t\"chip.locationExcluded\": \"Not preferred location: {value}\",\n\t\t\"chip.brandExcluded\": \"Not preferred brand: {value}\",\n\t\t\"chip.amenityExcluded\": \"Not preferred amenity: {value}\",\n\t\t\"chip.accommodationTypeExcluded\": \"Not preferred accommodation type: {value}\",\n\t\t\"chip.roomTypeExcluded\": \"Not preferred room type: {value}\",\n\t\t\"chip.stayPreferenceExcluded\": \"Not preferred: {value}\",\n\t\t\"sortInput.placeholder\": \"Ask me anything...\",\n\t\t\"sortInput.submit\": \"Ask\",\n\t\t\"sortInput.loading\": \"Searching...\",\n\t\t\"sortInput.retry\": \"Try again\",\n\t\t\"sortInput.clearAll\": \"Clear All\",\n\t\t\"sortInput.description.flight\": \"Share your preferences. AI will rank flights and explain the trade-offs.\",\n\t\t\"sortInput.description.hotel\": \"Share your preferences. AI will rank hotels and explain the trade-offs.\",\n\t\t\"error.network\": \"Connection error. Please try again.\",\n\t\t\"error.auth\": \"Smart sort is unavailable right now. Please try again later.\",\n\t\t\"error.timeout\": \"Request timed out. Please try again.\",\n\t\t\"error.stream\": \"Lost the connection to live results. Please try again.\",\n\t\t\"error.server\": \"An error occurred. Please try again.\",\n\t\t\"chips.clearAll\": \"Clear all\",\n\t\t\"chips.remove\": \"Remove {label}\",\n\t\t\"explain.loading\": \"Explaining top picks...\",\n\t\t\"explain.title.flight\": \"Why these flights are recommended\",\n\t\t\"explain.title.hotel\": \"Why these hotels are recommended\",\n\t\t\"explain.collapse\": \"Hide the explanation\",\n\t\t\"explain.expand\": \"Show the explanation\",\n\t\t\"explain.fallback\": \"Some results may not match all your preferences\",\n\t\t\"explain.refreshing\": \"Updating the explanation for new results\",\n\t\t\"explain.hiddenMatches.flight\": \"Your filters may be hiding some recommended flights.\",\n\t\t\"explain.hiddenMatches.hotel\": \"Your filters may be hiding some recommended hotels.\",\n\t\t\"explain.clearFilters\": \"Clear Filters\",\n\t\t\"explain.edit\": \"Edit\",\n\t\t\"prompt.flight.example1\": \"Non-stop, landing before noon\",\n\t\t\"prompt.flight.example2\": \"Cheapest option without a red-eye\",\n\t\t\"prompt.flight.example3\": \"Short layovers, no overnight stops\",\n\t\t\"prompt.flight.example4\": \"Prefer Saudia unless it costs much more\",\n\t\t\"prompt.flight.example5\": \"Morning departure with checked baggage\",\n\t\t\"prompt.hotel.example1\": \"4 stars or more, close to the beach\",\n\t\t\"prompt.hotel.example2\": \"Free cancellation with breakfast included\",\n\t\t\"prompt.hotel.example3\": \"Walking distance to the metro\",\n\t\t\"prompt.hotel.example4\": \"Great reviews under $200 a night\",\n\t\t\"prompt.hotel.example5\": \"Family-friendly with a pool\",\n\t\t\"confirm.sort.title\": \"Clear your Smart Sort query?\",\n\t\t\"confirm.sort.body\": \"Changing the sort will clear your Smart Sort query. Do you want to continue?\",\n\t\t\"confirm.sort.accept\": \"Continue\",\n\t\t\"confirm.sort.cancel\": \"Cancel\",\n\t\t\"spotlight.title\": \"Describe your ideal trip\",\n\t\t\"spotlight.body\": \"AI sorts the results to put your preferences first, without filtering anything out.\",\n\t\t\"spotlight.dismiss\": \"Let’s go!\",\n\t\t\"bestInfo.label\": \"About Best sort\",\n\t\t\"bestInfo.body\": \"The best result is chosen for overall relevance, balancing your preferences with price and availability.\",\n\t\t\"badge.partial\": \"Partial match\",\n\t\t\"badge.tooltip\": \"This result doesn’t match all of your preferences\"\n\t}\n};\n//#endregion\nexport { e as default };\n\n//# sourceMappingURL=en-D58zE54i.js.map"],"mappings":";AAAA,IAAI,IAAI;CACP,cAAc;CACd,QAAQ;CACR,UAAU;EACT,wBAAwB;EACxB,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,eAAe;EACf,cAAc;EACd,uBAAuB;EACvB,kBAAkB;EAClB,wBAAwB;EACxB,wBAAwB;EACxB,sBAAsB;EACtB,eAAe;EACf,iBAAiB;EACjB,yBAAyB;EACzB,uBAAuB;EACvB,iCAAiC;EACjC,+BAA+B;EAC/B,cAAc;EACd,mBAAmB;EACnB,0BAA0B;EAC1B,aAAa;EACb,uBAAuB;EACvB,sBAAsB;EACtB,yBAAyB;EACzB,sBAAsB;EACtB,wBAAwB;EACxB,kCAAkC;EAClC,yBAAyB;EACzB,+BAA+B;EAC/B,yBAAyB;EACzB,oBAAoB;EACpB,qBAAqB;EACrB,mBAAmB;EACnB,sBAAsB;EACtB,gCAAgC;EAChC,+BAA+B;EAC/B,iBAAiB;EACjB,cAAc;EACd,iBAAiB;EACjB,gBAAgB;EAChB,gBAAgB;EAChB,kBAAkB;EAClB,gBAAgB;EAChB,mBAAmB;EACnB,wBAAwB;EACxB,uBAAuB;EACvB,oBAAoB;EACpB,kBAAkB;EAClB,oBAAoB;EACpB,sBAAsB;EACtB,gCAAgC;EAChC,+BAA+B;EAC/B,wBAAwB;EACxB,gBAAgB;EAChB,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;EAC1B,yBAAyB;EACzB,yBAAyB;EACzB,yBAAyB;EACzB,yBAAyB;EACzB,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,uBAAuB;EACvB,uBAAuB;EACvB,mBAAmB;EACnB,kBAAkB;EAClB,qBAAqB;EACrB,kBAAkB;EAClB,iBAAiB;EACjB,iBAAiB;EACjB,iBAAiB;CAClB;AACD"}
|