@fluid-topics/ft-combobox 1.3.26

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.
@@ -0,0 +1,17 @@
1
+ import { FtComboboxSuggestionDefinition } from "./models";
2
+ export interface FtComboboxProperties {
3
+ label?: string;
4
+ icon?: string;
5
+ iconVariant?: string;
6
+ name?: string;
7
+ value?: string;
8
+ helper?: string;
9
+ disabled?: boolean;
10
+ error: boolean;
11
+ outlined?: boolean;
12
+ placeholder?: string;
13
+ filterSuggestions: boolean;
14
+ suggestionsHelper?: string;
15
+ suggestionsProvider: (query: string) => FtComboboxSuggestionDefinition[] | Promise<FtComboboxSuggestionDefinition[]>;
16
+ suggestionsProviderDebouncerTimeout?: number;
17
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,20 @@
1
+ export declare const FtComboboxCssVariables: {
2
+ fontSize: import("@fluid-topics/ft-wc-utils").FtCssVariable;
3
+ labelSize: import("@fluid-topics/ft-wc-utils").FtCssVariable;
4
+ verticalSpacing: import("@fluid-topics/ft-wc-utils").FtCssVariable;
5
+ horizontalSpacing: import("@fluid-topics/ft-wc-utils").FtCssVariable;
6
+ helperColor: import("@fluid-topics/ft-wc-utils").FtCssVariable;
7
+ colorPrimary: import("@fluid-topics/ft-wc-utils").FtCssVariable;
8
+ colorOnSurface: import("@fluid-topics/ft-wc-utils").FtCssVariable;
9
+ colorOnSurfaceDisabled: import("@fluid-topics/ft-wc-utils").FtCssVariable;
10
+ borderRadiusS: import("@fluid-topics/ft-wc-utils").FtCssVariable;
11
+ colorError: import("@fluid-topics/ft-wc-utils").FtCssVariable;
12
+ prefixColor: import("@fluid-topics/ft-wc-utils").FtCssVariable;
13
+ iconColor: import("@fluid-topics/ft-wc-utils").FtCssVariable;
14
+ floatingZIndex: import("@fluid-topics/ft-wc-utils").FtCssVariable;
15
+ backgroundColor: import("@fluid-topics/ft-wc-utils").FtCssVariable;
16
+ colorOutline: import("@fluid-topics/ft-wc-utils").FtCssVariable;
17
+ elevation02: import("@fluid-topics/ft-wc-utils").FtCssVariable;
18
+ suggestSize: import("@fluid-topics/ft-wc-utils").FtCssVariable;
19
+ };
20
+ export declare const styles: import("lit").CSSResult;
@@ -0,0 +1,190 @@
1
+ import { css } from "lit";
2
+ import { setVariable } from "@fluid-topics/ft-wc-utils";
3
+ import { FtInputLabelCssVariables } from "@fluid-topics/ft-input-label/build/ft-input-label.styles";
4
+ import { FtTextFieldCssVariables } from "@fluid-topics/ft-text-field";
5
+ import { FtIconCssVariables } from "@fluid-topics/ft-icon";
6
+ export const FtComboboxCssVariables = FtTextFieldCssVariables;
7
+ // language=CSS
8
+ export const styles = css `
9
+ *:focus {
10
+ outline: none;
11
+ }
12
+
13
+ .ft-combobox {
14
+ display: flex;
15
+ flex-direction: column;
16
+ align-items: stretch;
17
+ position: relative;
18
+ --combobox-internal-suggest-size: ${FtComboboxCssVariables.suggestSize};
19
+ }
20
+
21
+ ft-input-label {
22
+ ${setVariable(FtInputLabelCssVariables.fontSize, FtComboboxCssVariables.fontSize)};
23
+ ${setVariable(FtInputLabelCssVariables.raisedFontSize, FtComboboxCssVariables.labelSize)};
24
+ ${setVariable(FtInputLabelCssVariables.verticalSpacing, FtComboboxCssVariables.verticalSpacing)};
25
+ ${setVariable(FtInputLabelCssVariables.horizontalSpacing, FtComboboxCssVariables.horizontalSpacing)};
26
+ ${setVariable(FtInputLabelCssVariables.backgroundColor, FtComboboxCssVariables.backgroundColor)};
27
+ }
28
+
29
+ /* Ensure the floating label renders above input content and doesn't intercept events */
30
+ .ft-combobox--main-panel ft-input-label .ft-input-label {
31
+ z-index: 1;
32
+ pointer-events: none;
33
+ }
34
+
35
+ .ft-combobox--outlined ft-input-label {
36
+ ${setVariable(FtInputLabelCssVariables.backgroundColor, "transparent")};
37
+ }
38
+
39
+ .ft-combobox--main-panel {
40
+ position: relative;
41
+ display: flex;
42
+ height: calc(4 * ${FtComboboxCssVariables.verticalSpacing} + ${FtComboboxCssVariables.labelSize} + ${FtComboboxCssVariables.fontSize});
43
+ }
44
+
45
+ .ft-combobox--input-panel {
46
+ flex-grow: 1;
47
+ position: relative;
48
+ display: flex;
49
+ align-items: center;
50
+ overflow: hidden;
51
+ padding: 0 ${FtComboboxCssVariables.horizontalSpacing};
52
+ }
53
+
54
+ .ft-combobox--outlined .ft-combobox--input-panel {
55
+ border-radius: ${FtComboboxCssVariables.borderRadiusS};
56
+ }
57
+
58
+ .ft-combobox--filled .ft-combobox--input-panel {
59
+ border-radius: ${FtComboboxCssVariables.borderRadiusS} ${FtComboboxCssVariables.borderRadiusS} 0 0;
60
+ }
61
+
62
+ /* Match text-field filled layout when there is a label: input aligns to bottom and container has bottom padding */
63
+ .ft-combobox--filled.ft-combobox--with-label .ft-combobox--input-panel {
64
+ align-items: flex-end;
65
+ padding: 0 ${FtComboboxCssVariables.horizontalSpacing} ${FtComboboxCssVariables.verticalSpacing} ${FtComboboxCssVariables.horizontalSpacing};
66
+ }
67
+
68
+ /* Focus color on label when interacting */
69
+ .ft-combobox:not(.ft-combobox--disabled):focus-within ft-input-label {
70
+ ${setVariable(FtInputLabelCssVariables.borderColor, FtComboboxCssVariables.colorPrimary)};
71
+ ${setVariable(FtInputLabelCssVariables.textColor, FtComboboxCssVariables.colorPrimary)};
72
+ }
73
+
74
+ .ft-combobox--in-error .ft-combobox--input,
75
+ .ft-combobox--in-error .ft-combobox--helper-text {
76
+ color: ${FtTextFieldCssVariables.colorError};
77
+ }
78
+
79
+ .ft-combobox--input {
80
+ display: block;
81
+ position: relative;
82
+ flex-grow: 1;
83
+ flex-shrink: 1;
84
+ min-width: 0;
85
+ font-size: ${FtComboboxCssVariables.fontSize};
86
+ color: ${FtComboboxCssVariables.colorOnSurface};
87
+ padding: calc(2 * ${FtComboboxCssVariables.verticalSpacing}) 0;
88
+ border: none;
89
+ background: none;
90
+ }
91
+
92
+ .ft-combobox--with-label.ft-combobox--filled .ft-combobox--input {
93
+ padding-bottom: 0;
94
+ padding-top: calc(${FtComboboxCssVariables.labelSize} + 2 * ${FtComboboxCssVariables.verticalSpacing});
95
+ }
96
+
97
+ .ft-combobox--disabled .ft-combobox--input {
98
+ color: ${FtComboboxCssVariables.colorOnSurfaceDisabled};
99
+ cursor: not-allowed;
100
+ }
101
+
102
+ .ft-combobox--helper-text {
103
+ padding: 0 12px 0 ${FtComboboxCssVariables.horizontalSpacing};
104
+ color: ${FtComboboxCssVariables.helperColor};
105
+ }
106
+
107
+ .ft-combobox--listbox {
108
+ margin: 0;
109
+ padding: 0;
110
+ display: none;
111
+ position: absolute;
112
+ top: calc(100% + 2px);
113
+ left: -1px;
114
+ right: -1px;
115
+ list-style: none;
116
+ z-index: ${FtComboboxCssVariables.floatingZIndex};
117
+ background: ${FtComboboxCssVariables.backgroundColor};
118
+ border: 1px solid ${FtComboboxCssVariables.colorOutline};
119
+ border-radius: 0 0 ${FtComboboxCssVariables.borderRadiusS} ${FtComboboxCssVariables.borderRadiusS};
120
+ box-shadow: ${FtComboboxCssVariables.elevation02};
121
+ outline: none;
122
+ max-height: ${FtComboboxCssVariables.suggestSize};
123
+ overflow-y: auto;
124
+ overflow-x: hidden;
125
+ font-size: ${FtComboboxCssVariables.fontSize};
126
+ cursor: pointer;
127
+ }
128
+
129
+ .ft-combobox--listbox[data-visible="true"] {
130
+ display: block;
131
+ }
132
+
133
+ .ft-combobox--option {
134
+ margin: 0;
135
+ display: block;
136
+ padding: 0; /* Inner suggestion container handles padding */
137
+ cursor: pointer;
138
+ color: ${FtComboboxCssVariables.colorOnSurface};
139
+ }
140
+
141
+ .ft-combobox-suggestion {
142
+ position: relative;
143
+ padding: 8px ${FtComboboxCssVariables.horizontalSpacing};
144
+ cursor: pointer;
145
+ min-height: 44px;
146
+ box-sizing: border-box;
147
+ outline: none;
148
+ display: flex;
149
+ align-items: center;
150
+ gap: 8px;
151
+ }
152
+
153
+ .ft-combobox-suggestion--label {
154
+ display: flex;
155
+ align-items: center;
156
+ gap: 8px;
157
+ flex-grow: 1;
158
+ flex-shrink: 1;
159
+ }
160
+
161
+ .ft-combobox-suggestion--with-helper {
162
+ display: flex;
163
+ flex-direction: column;
164
+ align-items: flex-start;
165
+ gap: 0;
166
+ }
167
+
168
+ .ft-combobox-suggestion--helper-text {
169
+ color: ${FtComboboxCssVariables.helperColor};
170
+ }
171
+
172
+ .ft-combobox--option[aria-selected="true"] .ft-combobox-suggestion,
173
+ .ft-combobox--option:hover .ft-combobox-suggestion {
174
+ background-color: rgba(0, 0, 0, 0.04);
175
+ }
176
+
177
+ .ft-combobox--option-new-value {
178
+ border-top: 1px solid ${FtComboboxCssVariables.colorOutline};
179
+ }
180
+
181
+ .ft-combobox--icon {
182
+ align-self: center;
183
+ margin-left: 8px;
184
+ color: ${FtComboboxCssVariables.iconColor};
185
+ }
186
+
187
+ .ft-combobox--with-icon {
188
+ ${setVariable(FtInputLabelCssVariables.labelMaxWidth, `calc(100% - ${FtIconCssVariables.size} - ${FtComboboxCssVariables.horizontalSpacing})`)};
189
+ }
190
+ `;
@@ -0,0 +1,5 @@
1
+ export * from "./ft-combobox.styles";
2
+ export * from "./ft-combobox.properties";
3
+ export * from "./ft-combobox";
4
+ export * from "./models";
5
+ export * from "./ComboboxSuggestionProvider";
package/build/index.js ADDED
@@ -0,0 +1,8 @@
1
+ import { customElement } from "@fluid-topics/ft-wc-utils";
2
+ import { FtCombobox } from "./ft-combobox";
3
+ export * from "./ft-combobox.styles";
4
+ export * from "./ft-combobox.properties";
5
+ export * from "./ft-combobox";
6
+ export * from "./models";
7
+ export * from "./ComboboxSuggestionProvider";
8
+ customElement("ft-combobox")(FtCombobox);
@@ -0,0 +1,6 @@
1
+ import { FtIcons } from "@fluid-topics/ft-icon";
2
+ export interface FtComboboxSuggestionDefinition {
3
+ value: string;
4
+ label: string;
5
+ icon?: FtIcons;
6
+ }
@@ -0,0 +1 @@
1
+ export {};
package/package.json ADDED
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "@fluid-topics/ft-combobox",
3
+ "version": "1.3.26",
4
+ "description": "A",
5
+ "keywords": [
6
+ "Lit"
7
+ ],
8
+ "author": "Fluid Topics <devtopics@antidot.net>",
9
+ "license": "ISC",
10
+ "main": "build/index.js",
11
+ "web": "build/ft-combobox.min.js",
12
+ "typings": "build/index",
13
+ "files": [
14
+ "build/**/*.js",
15
+ "build/**/*.ts"
16
+ ],
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "ssh://git@scm.mrs.antidot.net:2222/fluidtopics/ft-web-components.git"
20
+ },
21
+ "dependencies": {
22
+ "@fluid-topics/ft-wc-utils": "1.3.26",
23
+ "lit": "3.1.0"
24
+ },
25
+ "devDependencies": {
26
+ "@fluid-topics/ft-wc-test-utils": "1.3.26"
27
+ },
28
+ "gitHead": "2801b1f3a132753af33d5d62b8001164737e2a4f"
29
+ }