@tmlmobilidade/ui 20250826.1336.59 → 20250826.1437.53
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/index.css +158 -0
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +45 -3
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/src/components/common/LineBadge/index.js +16 -0
- package/dist/src/components/common/LineBadge/index.js.map +1 -0
- package/dist/src/components/common/LineBadge/styles.module.css.js +4 -0
- package/dist/src/components/common/LineBadge/styles.module.css.js.map +1 -0
- package/dist/src/components/common/LineDisplay/index.js +21 -0
- package/dist/src/components/common/LineDisplay/index.js.map +1 -0
- package/dist/src/components/common/LineDisplay/styles.module.css.js +4 -0
- package/dist/src/components/common/LineDisplay/styles.module.css.js.map +1 -0
- package/dist/src/components/common/LineName/index.js +10 -0
- package/dist/src/components/common/LineName/index.js.map +1 -0
- package/dist/src/components/common/LineName/styles.module.css.js +4 -0
- package/dist/src/components/common/LineName/styles.module.css.js.map +1 -0
- package/dist/src/components/common/LineSelect/index.js +80 -0
- package/dist/src/components/common/LineSelect/index.js.map +1 -0
- package/dist/src/components/common/LineSelect/styles.module.css.js +4 -0
- package/dist/src/components/common/LineSelect/styles.module.css.js.map +1 -0
- package/dist/src/components/inputs/CoordinatesInput/index.js +2 -0
- package/dist/src/components/inputs/CoordinatesInput/index.js.map +1 -1
- package/dist/src/components/map/view/MapViewToolbar/index.js +2 -1
- package/dist/src/components/map/view/MapViewToolbar/index.js.map +1 -1
- package/dist/src/components/upload/FileUpload/index.js +2 -1
- package/dist/src/components/upload/FileUpload/index.js.map +1 -1
- package/dist/src/hooks/use-other-search.js +204 -0
- package/dist/src/hooks/use-other-search.js.map +1 -0
- package/dist/styles-no-reset.css +158 -0
- package/dist/styles.css +158 -0
- package/package.json +4 -2
@@ -0,0 +1,204 @@
|
|
1
|
+
'use client';
|
2
|
+
import ukkonen from 'ukkonen';
|
3
|
+
|
4
|
+
/* * */
|
5
|
+
/**
|
6
|
+
* Normalize a string by converting to lowercase, removing accents, and non-alphanumeric characters.
|
7
|
+
* @param str - The string to normalize.
|
8
|
+
* @returns The normalized string.
|
9
|
+
*/
|
10
|
+
function normalizeString(str) {
|
11
|
+
const res = str.toLowerCase()
|
12
|
+
.normalize('NFD')
|
13
|
+
.replace(/[\u0300-\u036f]/g, '')
|
14
|
+
.replace(/[^a-z0-9 ]/g, '');
|
15
|
+
return res;
|
16
|
+
}
|
17
|
+
/**
|
18
|
+
*
|
19
|
+
* @param docs Array of documents to search through, documents with a true 'boost' key will have their score multiplied by the boostMultiplier.
|
20
|
+
* This is useful for prioritizing certain documents.
|
21
|
+
* @param scoring Object with the keys of the documents to search through and the weight of the search on each key.
|
22
|
+
* @param options Options for the search.
|
23
|
+
* @returns
|
24
|
+
*/
|
25
|
+
function createDocCollection(docs, scoring, options = {}) {
|
26
|
+
const defaultOptions = {
|
27
|
+
boostMultiplier: 1.5,
|
28
|
+
minimumQueryLength: 1,
|
29
|
+
threshold: 2,
|
30
|
+
useLevenshtein: true,
|
31
|
+
};
|
32
|
+
const finalOptions = {
|
33
|
+
...defaultOptions,
|
34
|
+
...options,
|
35
|
+
};
|
36
|
+
const normalizedDocs = docs.map((doc) => {
|
37
|
+
const normalizedDoc = {};
|
38
|
+
for (const key in scoring) {
|
39
|
+
const v = doc[key];
|
40
|
+
if (typeof v === 'string') {
|
41
|
+
normalizedDoc[key] = normalizeString(v);
|
42
|
+
}
|
43
|
+
else if (Array.isArray(v)) {
|
44
|
+
normalizedDoc[key] = v.filter(v => v != null).map(normalizeString);
|
45
|
+
}
|
46
|
+
}
|
47
|
+
return { doc, normalized: normalizedDoc };
|
48
|
+
});
|
49
|
+
const levenshteinCache = new Map();
|
50
|
+
return {
|
51
|
+
search: (query) => searchDocuments(query, normalizedDocs, scoring, levenshteinCache, finalOptions),
|
52
|
+
};
|
53
|
+
}
|
54
|
+
/**
|
55
|
+
* Calculate the Levenshtein distance between two strings, using a cache to speed up the process.
|
56
|
+
* @param a - The first string.
|
57
|
+
* @param b - The second string.
|
58
|
+
* @param maxDistance - The maximum distance allowed. Stops early which significantly speeds up the process.
|
59
|
+
* @param levenshteinCache - The cache to store the results.
|
60
|
+
* @returns - The Levenshtein distance.
|
61
|
+
*/
|
62
|
+
const levenshteinDistance = (a, b, maxDistance, levenshteinCache) => {
|
63
|
+
const cachekey = a + '\n' + b;
|
64
|
+
const cacheValue = levenshteinCache.get(cachekey);
|
65
|
+
if (cacheValue !== undefined) {
|
66
|
+
return cacheValue;
|
67
|
+
}
|
68
|
+
const res = ukkonen(a, b, maxDistance);
|
69
|
+
levenshteinCache.set(cachekey, res);
|
70
|
+
return res;
|
71
|
+
};
|
72
|
+
/**
|
73
|
+
* Calculate the score for a string, based on the number of consecutive query words that prefix match.
|
74
|
+
* "The quick brown fox" has a score of 1 for "quick brown" and 0 for "quick fox".
|
75
|
+
* @param text The text to score.
|
76
|
+
* @param queryWords The query words to match.
|
77
|
+
* @returns The context score.
|
78
|
+
*/
|
79
|
+
const sequentialWordsMatchScore = (text, queryWords) => {
|
80
|
+
const textWords = text.split(' ');
|
81
|
+
let contextScore = 0;
|
82
|
+
for (let i = 0; i <= textWords.length - queryWords.length; i++) {
|
83
|
+
if (queryWords.every((qw, j) => isPrefixMatch(textWords[i + j] ?? '', qw))) {
|
84
|
+
contextScore++;
|
85
|
+
}
|
86
|
+
}
|
87
|
+
return contextScore;
|
88
|
+
};
|
89
|
+
/**
|
90
|
+
* Check if a word starts with a given prefix.
|
91
|
+
* @param word The word to check.
|
92
|
+
* @param prefix The prefix to match.
|
93
|
+
* @returns True if the word starts with the prefix, false otherwise.
|
94
|
+
*/
|
95
|
+
const isPrefixMatch = (word, prefix) => {
|
96
|
+
const res = word.startsWith(prefix);
|
97
|
+
return res;
|
98
|
+
};
|
99
|
+
/**
|
100
|
+
* Search documents based on a query using prefix matching and fuzzy search.
|
101
|
+
* @param query - The search query.
|
102
|
+
* @param docs - Array of documents to search through. Each document should have 'primary' and 'secondary' fields.
|
103
|
+
* @returns Filtered and sorted documents based on relevance to the query.
|
104
|
+
*/
|
105
|
+
function searchDocuments(query, docs, scoreWeights, levenshteinCache, options) {
|
106
|
+
/**
|
107
|
+
* Calculate the relevance score for a document based on the query words.
|
108
|
+
* @param doc - The document to score.
|
109
|
+
* @param queryWords - The query words to match.
|
110
|
+
* @returns - The relevance score.
|
111
|
+
*/
|
112
|
+
const calculateScore = (doc, boost, queryWords, scoring) => {
|
113
|
+
let totalScore = 0;
|
114
|
+
// The algorithm implements a prefix search per word,
|
115
|
+
// followed by a fuzzy search if the prefix search is not successful
|
116
|
+
const matchWord = (documentSearchedWords, queryWord) => {
|
117
|
+
// fuzzy search tolerance increases very slightly with query word length
|
118
|
+
const maxLevDistance = Math.max(options.minimumQueryLength, Math.ceil(0.3 * queryWord.length));
|
119
|
+
const documentWordScores = documentSearchedWords.map((word) => {
|
120
|
+
// If the word is a prefix match, match, else fuzzy search and give lower score
|
121
|
+
if (isPrefixMatch(word, queryWord)) {
|
122
|
+
return 1;
|
123
|
+
}
|
124
|
+
// Check if the query is of enough size to be searched
|
125
|
+
else if (options.useLevenshtein === true && queryWord.length > options.minimumQueryLength && word.length > options.minimumQueryLength) {
|
126
|
+
// If the query is a number, we don't want to do a fuzzy search
|
127
|
+
if (Number.isNaN(Number(queryWord)) && levenshteinDistance(word, queryWord, maxLevDistance, levenshteinCache) < maxLevDistance) {
|
128
|
+
return 0.5;
|
129
|
+
}
|
130
|
+
}
|
131
|
+
return 0;
|
132
|
+
});
|
133
|
+
return Math.max(...documentWordScores);
|
134
|
+
};
|
135
|
+
// Calculate the score for each field in the document
|
136
|
+
for (const untypedKey in scoring) {
|
137
|
+
// Typescript magic for assuring the key is actually one of our keys
|
138
|
+
const key = untypedKey;
|
139
|
+
const documentValue = doc[key];
|
140
|
+
const multiplier = scoring[key] ?? 1;
|
141
|
+
// If the value is an array, we treat it as a list of words
|
142
|
+
if (Array.isArray(documentValue)) {
|
143
|
+
if (documentValue.length === 0) {
|
144
|
+
continue;
|
145
|
+
}
|
146
|
+
const documentStrings = documentValue;
|
147
|
+
if (queryWords.length > 0) {
|
148
|
+
// Match each query word against a locality.
|
149
|
+
// We do not match against each word in the locality as this would be very slow. TODO improve
|
150
|
+
queryWords.forEach((queryWord) => {
|
151
|
+
// The length penalty is a factor that decreases the score
|
152
|
+
// of a word match based on the length of the query word.
|
153
|
+
// This is to prevent short words from being too heavily weighted.
|
154
|
+
// The penalty is a factor of the length of the query word divided by 4
|
155
|
+
// The penalty is then clamped between 0 and 1.
|
156
|
+
const lengthPenalty = Math.min(queryWord.length / 4, 1);
|
157
|
+
totalScore += matchWord(documentStrings, queryWord) * multiplier * lengthPenalty;
|
158
|
+
});
|
159
|
+
}
|
160
|
+
}
|
161
|
+
else if (typeof documentValue === 'string') {
|
162
|
+
const documentWords = documentValue.split(' ');
|
163
|
+
queryWords.forEach((queryWord) => {
|
164
|
+
// See above
|
165
|
+
const lengthPenalty = Math.min(queryWord.length / 4, 1);
|
166
|
+
totalScore += matchWord(documentWords, queryWord) * multiplier * lengthPenalty;
|
167
|
+
});
|
168
|
+
if (queryWords.length > 1) {
|
169
|
+
totalScore += sequentialWordsMatchScore(documentValue, queryWords) * multiplier;
|
170
|
+
}
|
171
|
+
}
|
172
|
+
}
|
173
|
+
// For the query, it matches primary string first,
|
174
|
+
// then the secondary string the same way
|
175
|
+
if (boost) {
|
176
|
+
totalScore *= options.boostMultiplier;
|
177
|
+
}
|
178
|
+
return totalScore;
|
179
|
+
};
|
180
|
+
// Normalize query and split into words, filtering out words that are too short and that are not numbers
|
181
|
+
const queryWords = normalizeString(query)
|
182
|
+
.split(' ')
|
183
|
+
.filter((word) => word.length > 0 && (word.length >= options.minimumQueryLength || !Number.isNaN(Number(word))));
|
184
|
+
// Calculate the score for each document, using the normalized string
|
185
|
+
const scoredDocs = docs.map(doc => ({
|
186
|
+
doc: doc.doc,
|
187
|
+
score: calculateScore(doc.normalized, doc.doc.boost, queryWords, scoreWeights),
|
188
|
+
}));
|
189
|
+
// Sort the documents by score
|
190
|
+
const sortedScoreDocs = scoredDocs.sort((a, b) => b.score - a.score);
|
191
|
+
// Filter out documents with a score less than half of the top score
|
192
|
+
const bestScore = sortedScoreDocs[0]?.score;
|
193
|
+
const filteredScoreDocs = sortedScoreDocs.filter(scoredDoc => scoredDoc.score > Math.floor(bestScore ?? 0 / options.threshold) || bestScore === 0);
|
194
|
+
// If top score is 0, we filter out all documents
|
195
|
+
if (bestScore === 0) {
|
196
|
+
return [];
|
197
|
+
}
|
198
|
+
// Sort the documents by score and
|
199
|
+
return filteredScoreDocs.map(scoredDoc => scoredDoc.doc);
|
200
|
+
//
|
201
|
+
}
|
202
|
+
|
203
|
+
export { createDocCollection };
|
204
|
+
//# sourceMappingURL=use-other-search.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"use-other-search.js","sources":["../../../src/hooks/use-other-search.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/dist/styles-no-reset.css
CHANGED
@@ -10715,6 +10715,164 @@ breakpoint-mobile {
|
|
10715
10715
|
flex-wrap: wrap-reverse;
|
10716
10716
|
}
|
10717
10717
|
|
10718
|
+
/* * */
|
10719
|
+
/* BADGE */
|
10720
|
+
|
10721
|
+
.styles-module_badge__-PqgE {
|
10722
|
+
position: relative;
|
10723
|
+
display: flex;
|
10724
|
+
align-items: center;
|
10725
|
+
justify-content: center;
|
10726
|
+
font-weight: var(--font-weight-bold);
|
10727
|
+
line-height: 1;
|
10728
|
+
color: var(--color-system-background-100);
|
10729
|
+
letter-spacing: 1px;
|
10730
|
+
background-color: var(--color-system-text-200);
|
10731
|
+
border-radius: 999px;
|
10732
|
+
|
10733
|
+
&[data-size='md'] {
|
10734
|
+
min-width: 65px;
|
10735
|
+
max-width: 65px;
|
10736
|
+
min-height: 26px;
|
10737
|
+
max-height: 26px;
|
10738
|
+
font-size: 16px;
|
10739
|
+
}
|
10740
|
+
|
10741
|
+
&[data-size='lg'] {
|
10742
|
+
min-width: 85px;
|
10743
|
+
max-width: 85px;
|
10744
|
+
min-height: 34px;
|
10745
|
+
max-height: 34px;
|
10746
|
+
font-size: 22px;
|
10747
|
+
}
|
10748
|
+
}
|
10749
|
+
|
10750
|
+
|
10751
|
+
/* * */
|
10752
|
+
/* ALERT ICON */
|
10753
|
+
|
10754
|
+
.styles-module_alertIcon__JtR4k {
|
10755
|
+
position: absolute;
|
10756
|
+
top: -10px;
|
10757
|
+
right: -10px;
|
10758
|
+
display: flex;
|
10759
|
+
align-items: center;
|
10760
|
+
justify-content: center;
|
10761
|
+
width: 20px;
|
10762
|
+
height: 20px;
|
10763
|
+
color: var(--color-status-info-text);
|
10764
|
+
background-color: var(--color-primary-white);
|
10765
|
+
border-radius: 999px;
|
10766
|
+
}
|
10767
|
+
/* * */
|
10768
|
+
/* NAME */
|
10769
|
+
|
10770
|
+
.styles-module_name__nmepm {
|
10771
|
+
display: -webkit-box;
|
10772
|
+
justify-content: flex-start;
|
10773
|
+
width: 100%;
|
10774
|
+
overflow: hidden;
|
10775
|
+
text-overflow: ellipsis;
|
10776
|
+
-webkit-line-clamp: 3;
|
10777
|
+
color: var(--color-system-text-100);
|
10778
|
+
-webkit-box-orient: vertical;
|
10779
|
+
}
|
10780
|
+
|
10781
|
+
/* * */
|
10782
|
+
/* SIZE */
|
10783
|
+
|
10784
|
+
.styles-module_name__nmepm[data-size='md'] {
|
10785
|
+
font-size: 15px;
|
10786
|
+
font-weight: var(--font-weight-semibold);
|
10787
|
+
}
|
10788
|
+
|
10789
|
+
.styles-module_name__nmepm[data-size='lg'] {
|
10790
|
+
font-size: 20px;
|
10791
|
+
font-weight: var(--font-weight-semibold);
|
10792
|
+
}
|
10793
|
+
|
10794
|
+
/* * */
|
10795
|
+
/* ALIGN */
|
10796
|
+
|
10797
|
+
.styles-module_name__nmepm[data-align='left'] {
|
10798
|
+
align-items: flex-start;
|
10799
|
+
text-align: left;
|
10800
|
+
}
|
10801
|
+
|
10802
|
+
.styles-module_name__nmepm[data-align='center'] {
|
10803
|
+
align-items: center;
|
10804
|
+
text-align: center;
|
10805
|
+
}
|
10806
|
+
/* * */
|
10807
|
+
/* CONTAINER */
|
10808
|
+
|
10809
|
+
.styles-module_container__A88zF {
|
10810
|
+
display: flex;
|
10811
|
+
flex-direction: row;
|
10812
|
+
gap: var(--size-spacing-sm);
|
10813
|
+
align-items: center;
|
10814
|
+
justify-content: flex-start;
|
10815
|
+
}
|
10816
|
+
|
10817
|
+
/* * */
|
10818
|
+
/* COMBOBOX TARGET WRAPPER */
|
10819
|
+
|
10820
|
+
.styles-module_comboboxTargetWrapper__MxB1r {
|
10821
|
+
position: relative;
|
10822
|
+
width: 100%;
|
10823
|
+
height: auto;
|
10824
|
+
}
|
10825
|
+
|
10826
|
+
/* * */
|
10827
|
+
/* COMBOBOX TARGET INPUT */
|
10828
|
+
|
10829
|
+
.styles-module_comboboxTargetInput__Qle1Y {
|
10830
|
+
width: 100%;
|
10831
|
+
height: auto;
|
10832
|
+
max-height: none;
|
10833
|
+
padding: 13px calc(var(--size-spacing-md) + 30px);
|
10834
|
+
padding-bottom: 12px;
|
10835
|
+
font-size: 18px;
|
10836
|
+
line-height: 1;
|
10837
|
+
color: var(--color-system-text-100);
|
10838
|
+
background-color: var(--color-system-background-100);
|
10839
|
+
border: 1px solid var(--color-system-border-200);
|
10840
|
+
border-radius: 5px;
|
10841
|
+
}
|
10842
|
+
|
10843
|
+
/* * */
|
10844
|
+
/* COMBOBOX TARGET SECTION */
|
10845
|
+
|
10846
|
+
.styles-module_comboboxTargetSection__Q9IFI {
|
10847
|
+
position: absolute;
|
10848
|
+
display: flex;
|
10849
|
+
width: auto;
|
10850
|
+
padding: var(--size-spacing-sm);
|
10851
|
+
color: var(--color-system-text-300);
|
10852
|
+
}
|
10853
|
+
|
10854
|
+
.styles-module_comboboxTargetSection__Q9IFI[data-position="left"] {
|
10855
|
+
left: 1px;
|
10856
|
+
}
|
10857
|
+
|
10858
|
+
.styles-module_comboboxTargetSection__Q9IFI[data-position="right"] {
|
10859
|
+
right: 1px;
|
10860
|
+
}
|
10861
|
+
|
10862
|
+
/* * */
|
10863
|
+
/* COMBOBOX OPTION */
|
10864
|
+
|
10865
|
+
.styles-module_comboboxOption__gQmRA {
|
10866
|
+
padding: 6px;
|
10867
|
+
}
|
10868
|
+
|
10869
|
+
/* * */
|
10870
|
+
/* SELECTED */
|
10871
|
+
|
10872
|
+
.styles-module_selected__AYGBH {
|
10873
|
+
background-color: var(--color-system-background-200) !important;
|
10874
|
+
}
|
10875
|
+
|
10718
10876
|
.styles-module_header__6dpaJ {
|
10719
10877
|
position: sticky;
|
10720
10878
|
top: 0;
|
package/dist/styles.css
CHANGED
@@ -10770,6 +10770,164 @@ breakpoint-mobile {
|
|
10770
10770
|
flex-wrap: wrap-reverse;
|
10771
10771
|
}
|
10772
10772
|
|
10773
|
+
/* * */
|
10774
|
+
/* BADGE */
|
10775
|
+
|
10776
|
+
.styles-module_badge__-PqgE {
|
10777
|
+
position: relative;
|
10778
|
+
display: flex;
|
10779
|
+
align-items: center;
|
10780
|
+
justify-content: center;
|
10781
|
+
font-weight: var(--font-weight-bold);
|
10782
|
+
line-height: 1;
|
10783
|
+
color: var(--color-system-background-100);
|
10784
|
+
letter-spacing: 1px;
|
10785
|
+
background-color: var(--color-system-text-200);
|
10786
|
+
border-radius: 999px;
|
10787
|
+
|
10788
|
+
&[data-size='md'] {
|
10789
|
+
min-width: 65px;
|
10790
|
+
max-width: 65px;
|
10791
|
+
min-height: 26px;
|
10792
|
+
max-height: 26px;
|
10793
|
+
font-size: 16px;
|
10794
|
+
}
|
10795
|
+
|
10796
|
+
&[data-size='lg'] {
|
10797
|
+
min-width: 85px;
|
10798
|
+
max-width: 85px;
|
10799
|
+
min-height: 34px;
|
10800
|
+
max-height: 34px;
|
10801
|
+
font-size: 22px;
|
10802
|
+
}
|
10803
|
+
}
|
10804
|
+
|
10805
|
+
|
10806
|
+
/* * */
|
10807
|
+
/* ALERT ICON */
|
10808
|
+
|
10809
|
+
.styles-module_alertIcon__JtR4k {
|
10810
|
+
position: absolute;
|
10811
|
+
top: -10px;
|
10812
|
+
right: -10px;
|
10813
|
+
display: flex;
|
10814
|
+
align-items: center;
|
10815
|
+
justify-content: center;
|
10816
|
+
width: 20px;
|
10817
|
+
height: 20px;
|
10818
|
+
color: var(--color-status-info-text);
|
10819
|
+
background-color: var(--color-primary-white);
|
10820
|
+
border-radius: 999px;
|
10821
|
+
}
|
10822
|
+
/* * */
|
10823
|
+
/* NAME */
|
10824
|
+
|
10825
|
+
.styles-module_name__nmepm {
|
10826
|
+
display: -webkit-box;
|
10827
|
+
justify-content: flex-start;
|
10828
|
+
width: 100%;
|
10829
|
+
overflow: hidden;
|
10830
|
+
text-overflow: ellipsis;
|
10831
|
+
-webkit-line-clamp: 3;
|
10832
|
+
color: var(--color-system-text-100);
|
10833
|
+
-webkit-box-orient: vertical;
|
10834
|
+
}
|
10835
|
+
|
10836
|
+
/* * */
|
10837
|
+
/* SIZE */
|
10838
|
+
|
10839
|
+
.styles-module_name__nmepm[data-size='md'] {
|
10840
|
+
font-size: 15px;
|
10841
|
+
font-weight: var(--font-weight-semibold);
|
10842
|
+
}
|
10843
|
+
|
10844
|
+
.styles-module_name__nmepm[data-size='lg'] {
|
10845
|
+
font-size: 20px;
|
10846
|
+
font-weight: var(--font-weight-semibold);
|
10847
|
+
}
|
10848
|
+
|
10849
|
+
/* * */
|
10850
|
+
/* ALIGN */
|
10851
|
+
|
10852
|
+
.styles-module_name__nmepm[data-align='left'] {
|
10853
|
+
align-items: flex-start;
|
10854
|
+
text-align: left;
|
10855
|
+
}
|
10856
|
+
|
10857
|
+
.styles-module_name__nmepm[data-align='center'] {
|
10858
|
+
align-items: center;
|
10859
|
+
text-align: center;
|
10860
|
+
}
|
10861
|
+
/* * */
|
10862
|
+
/* CONTAINER */
|
10863
|
+
|
10864
|
+
.styles-module_container__A88zF {
|
10865
|
+
display: flex;
|
10866
|
+
flex-direction: row;
|
10867
|
+
gap: var(--size-spacing-sm);
|
10868
|
+
align-items: center;
|
10869
|
+
justify-content: flex-start;
|
10870
|
+
}
|
10871
|
+
|
10872
|
+
/* * */
|
10873
|
+
/* COMBOBOX TARGET WRAPPER */
|
10874
|
+
|
10875
|
+
.styles-module_comboboxTargetWrapper__MxB1r {
|
10876
|
+
position: relative;
|
10877
|
+
width: 100%;
|
10878
|
+
height: auto;
|
10879
|
+
}
|
10880
|
+
|
10881
|
+
/* * */
|
10882
|
+
/* COMBOBOX TARGET INPUT */
|
10883
|
+
|
10884
|
+
.styles-module_comboboxTargetInput__Qle1Y {
|
10885
|
+
width: 100%;
|
10886
|
+
height: auto;
|
10887
|
+
max-height: none;
|
10888
|
+
padding: 13px calc(var(--size-spacing-md) + 30px);
|
10889
|
+
padding-bottom: 12px;
|
10890
|
+
font-size: 18px;
|
10891
|
+
line-height: 1;
|
10892
|
+
color: var(--color-system-text-100);
|
10893
|
+
background-color: var(--color-system-background-100);
|
10894
|
+
border: 1px solid var(--color-system-border-200);
|
10895
|
+
border-radius: 5px;
|
10896
|
+
}
|
10897
|
+
|
10898
|
+
/* * */
|
10899
|
+
/* COMBOBOX TARGET SECTION */
|
10900
|
+
|
10901
|
+
.styles-module_comboboxTargetSection__Q9IFI {
|
10902
|
+
position: absolute;
|
10903
|
+
display: flex;
|
10904
|
+
width: auto;
|
10905
|
+
padding: var(--size-spacing-sm);
|
10906
|
+
color: var(--color-system-text-300);
|
10907
|
+
}
|
10908
|
+
|
10909
|
+
.styles-module_comboboxTargetSection__Q9IFI[data-position="left"] {
|
10910
|
+
left: 1px;
|
10911
|
+
}
|
10912
|
+
|
10913
|
+
.styles-module_comboboxTargetSection__Q9IFI[data-position="right"] {
|
10914
|
+
right: 1px;
|
10915
|
+
}
|
10916
|
+
|
10917
|
+
/* * */
|
10918
|
+
/* COMBOBOX OPTION */
|
10919
|
+
|
10920
|
+
.styles-module_comboboxOption__gQmRA {
|
10921
|
+
padding: 6px;
|
10922
|
+
}
|
10923
|
+
|
10924
|
+
/* * */
|
10925
|
+
/* SELECTED */
|
10926
|
+
|
10927
|
+
.styles-module_selected__AYGBH {
|
10928
|
+
background-color: var(--color-system-background-200) !important;
|
10929
|
+
}
|
10930
|
+
|
10773
10931
|
.styles-module_header__6dpaJ {
|
10774
10932
|
position: sticky;
|
10775
10933
|
top: 0;
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@tmlmobilidade/ui",
|
3
3
|
"description": "UI components for Transportes Metropolitanos de Lisboa (TML) web applications.",
|
4
|
-
"version": "20250826.
|
4
|
+
"version": "20250826.1437.53",
|
5
5
|
"author": "João de Vasconcelos & Jusi Monteiro",
|
6
6
|
"license": "AGPL-3.0-or-later",
|
7
7
|
"publishConfig": {
|
@@ -42,6 +42,7 @@
|
|
42
42
|
"path": false
|
43
43
|
},
|
44
44
|
"dependencies": {
|
45
|
+
"@carrismetropolitana/api-types": "^20250820.1130.53",
|
45
46
|
"@mantine/core": "8.2.5",
|
46
47
|
"@mantine/dates": "8.2.5",
|
47
48
|
"@mantine/form": "8.2.5",
|
@@ -58,7 +59,8 @@
|
|
58
59
|
"mantine-form-zod-resolver": "1.3.0",
|
59
60
|
"maplibre-gl": "5.7.0",
|
60
61
|
"react": "19.x",
|
61
|
-
"react-viewport-list": "7.1.2"
|
62
|
+
"react-viewport-list": "7.1.2",
|
63
|
+
"ukkonen": "^2.2.0"
|
62
64
|
},
|
63
65
|
"devDependencies": {
|
64
66
|
"@rollup/plugin-commonjs": "28.0.6",
|