@ttoss/fsl-ui 0.2.4
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/LICENSE +21 -0
- package/README.md +76 -0
- package/dist/_virtual/_rolldown/runtime.cjs +30 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.cjs +129 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.d.cts +61 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.d.mts +61 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.mjs +126 -0
- package/dist/components/Button/Button.cjs +80 -0
- package/dist/components/Button/Button.d.cts +68 -0
- package/dist/components/Button/Button.d.mts +68 -0
- package/dist/components/Button/Button.mjs +79 -0
- package/dist/components/Checkbox/Checkbox.cjs +183 -0
- package/dist/components/Checkbox/Checkbox.d.cts +45 -0
- package/dist/components/Checkbox/Checkbox.d.mts +45 -0
- package/dist/components/Checkbox/Checkbox.mjs +182 -0
- package/dist/components/CheckboxGroup/CheckboxGroup.cjs +97 -0
- package/dist/components/CheckboxGroup/CheckboxGroup.d.cts +56 -0
- package/dist/components/CheckboxGroup/CheckboxGroup.d.mts +56 -0
- package/dist/components/CheckboxGroup/CheckboxGroup.mjs +96 -0
- package/dist/components/FileTrigger/FileTrigger.cjs +51 -0
- package/dist/components/FileTrigger/FileTrigger.d.cts +52 -0
- package/dist/components/FileTrigger/FileTrigger.d.mts +52 -0
- package/dist/components/FileTrigger/FileTrigger.mjs +50 -0
- package/dist/components/GridList/GridList.cjs +220 -0
- package/dist/components/GridList/GridList.d.cts +72 -0
- package/dist/components/GridList/GridList.d.mts +72 -0
- package/dist/components/GridList/GridList.mjs +217 -0
- package/dist/components/Group/Group.cjs +77 -0
- package/dist/components/Group/Group.d.cts +61 -0
- package/dist/components/Group/Group.d.mts +61 -0
- package/dist/components/Group/Group.mjs +74 -0
- package/dist/components/Icon/Icon.cjs +52 -0
- package/dist/components/Icon/Icon.mjs +52 -0
- package/dist/components/Icon/glyphs.cjs +72 -0
- package/dist/components/Icon/glyphs.mjs +63 -0
- package/dist/components/Link/Link.cjs +62 -0
- package/dist/components/Link/Link.d.cts +38 -0
- package/dist/components/Link/Link.d.mts +38 -0
- package/dist/components/Link/Link.mjs +61 -0
- package/dist/components/ListBox/ListBox.cjs +126 -0
- package/dist/components/ListBox/ListBox.d.cts +63 -0
- package/dist/components/ListBox/ListBox.d.mts +63 -0
- package/dist/components/ListBox/ListBox.mjs +123 -0
- package/dist/components/Meter/Meter.cjs +126 -0
- package/dist/components/Meter/Meter.d.cts +63 -0
- package/dist/components/Meter/Meter.d.mts +63 -0
- package/dist/components/Meter/Meter.mjs +125 -0
- package/dist/components/NumberField/NumberField.cjs +221 -0
- package/dist/components/NumberField/NumberField.d.cts +68 -0
- package/dist/components/NumberField/NumberField.d.mts +68 -0
- package/dist/components/NumberField/NumberField.mjs +220 -0
- package/dist/components/ProgressBar/ProgressBar.cjs +132 -0
- package/dist/components/ProgressBar/ProgressBar.d.cts +56 -0
- package/dist/components/ProgressBar/ProgressBar.d.mts +56 -0
- package/dist/components/ProgressBar/ProgressBar.mjs +129 -0
- package/dist/components/RadioGroup/RadioGroup.cjs +218 -0
- package/dist/components/RadioGroup/RadioGroup.d.cts +82 -0
- package/dist/components/RadioGroup/RadioGroup.d.mts +82 -0
- package/dist/components/RadioGroup/RadioGroup.mjs +215 -0
- package/dist/components/Select/Select.cjs +253 -0
- package/dist/components/Select/Select.d.cts +86 -0
- package/dist/components/Select/Select.d.mts +86 -0
- package/dist/components/Select/Select.mjs +250 -0
- package/dist/components/Separator/Separator.cjs +64 -0
- package/dist/components/Separator/Separator.d.cts +44 -0
- package/dist/components/Separator/Separator.d.mts +44 -0
- package/dist/components/Separator/Separator.mjs +63 -0
- package/dist/components/Slider/Slider.cjs +160 -0
- package/dist/components/Slider/Slider.d.cts +45 -0
- package/dist/components/Slider/Slider.d.mts +45 -0
- package/dist/components/Slider/Slider.mjs +159 -0
- package/dist/components/Switch/Switch.cjs +176 -0
- package/dist/components/Switch/Switch.d.cts +43 -0
- package/dist/components/Switch/Switch.d.mts +43 -0
- package/dist/components/Switch/Switch.mjs +175 -0
- package/dist/components/Tabs/Tabs.cjs +180 -0
- package/dist/components/Tabs/Tabs.d.cts +85 -0
- package/dist/components/Tabs/Tabs.d.mts +85 -0
- package/dist/components/Tabs/Tabs.mjs +173 -0
- package/dist/components/Toast/Toast.cjs +218 -0
- package/dist/components/Toast/Toast.d.cts +96 -0
- package/dist/components/Toast/Toast.d.mts +96 -0
- package/dist/components/Toast/Toast.mjs +214 -0
- package/dist/components/ToggleButton/ToggleButton.cjs +125 -0
- package/dist/components/ToggleButton/ToggleButton.d.cts +43 -0
- package/dist/components/ToggleButton/ToggleButton.d.mts +43 -0
- package/dist/components/ToggleButton/ToggleButton.mjs +124 -0
- package/dist/components/ToggleButtonGroup/ToggleButtonGroup.cjs +48 -0
- package/dist/components/ToggleButtonGroup/ToggleButtonGroup.d.cts +41 -0
- package/dist/components/ToggleButtonGroup/ToggleButtonGroup.d.mts +41 -0
- package/dist/components/ToggleButtonGroup/ToggleButtonGroup.mjs +47 -0
- package/dist/components/Toolbar/Toolbar.cjs +67 -0
- package/dist/components/Toolbar/Toolbar.d.cts +60 -0
- package/dist/components/Toolbar/Toolbar.d.mts +60 -0
- package/dist/components/Toolbar/Toolbar.mjs +66 -0
- package/dist/composites/Accordion/Accordion.cjs +279 -0
- package/dist/composites/Accordion/Accordion.d.cts +176 -0
- package/dist/composites/Accordion/Accordion.d.mts +176 -0
- package/dist/composites/Accordion/Accordion.mjs +270 -0
- package/dist/composites/ConfirmationDialog/ConfirmationDialog.cjs +206 -0
- package/dist/composites/ConfirmationDialog/ConfirmationDialog.d.cts +166 -0
- package/dist/composites/ConfirmationDialog/ConfirmationDialog.d.mts +166 -0
- package/dist/composites/ConfirmationDialog/ConfirmationDialog.mjs +203 -0
- package/dist/composites/Dialog/Dialog.cjs +372 -0
- package/dist/composites/Dialog/Dialog.d.cts +234 -0
- package/dist/composites/Dialog/Dialog.d.mts +234 -0
- package/dist/composites/Dialog/Dialog.mjs +360 -0
- package/dist/composites/Disclosure/Disclosure.cjs +214 -0
- package/dist/composites/Disclosure/Disclosure.d.cts +118 -0
- package/dist/composites/Disclosure/Disclosure.d.mts +118 -0
- package/dist/composites/Disclosure/Disclosure.mjs +207 -0
- package/dist/composites/Form/Form.cjs +161 -0
- package/dist/composites/Form/Form.d.cts +176 -0
- package/dist/composites/Form/Form.d.mts +176 -0
- package/dist/composites/Form/Form.mjs +156 -0
- package/dist/composites/Menu/Menu.cjs +190 -0
- package/dist/composites/Menu/Menu.d.cts +158 -0
- package/dist/composites/Menu/Menu.d.mts +158 -0
- package/dist/composites/Menu/Menu.mjs +186 -0
- package/dist/composites/Popover/Popover.cjs +80 -0
- package/dist/composites/Popover/Popover.d.cts +56 -0
- package/dist/composites/Popover/Popover.d.mts +56 -0
- package/dist/composites/Popover/Popover.mjs +78 -0
- package/dist/composites/SearchField/SearchField.cjs +194 -0
- package/dist/composites/SearchField/SearchField.d.cts +81 -0
- package/dist/composites/SearchField/SearchField.d.mts +81 -0
- package/dist/composites/SearchField/SearchField.mjs +189 -0
- package/dist/composites/TagGroup/TagGroup.cjs +212 -0
- package/dist/composites/TagGroup/TagGroup.d.cts +84 -0
- package/dist/composites/TagGroup/TagGroup.d.mts +84 -0
- package/dist/composites/TagGroup/TagGroup.mjs +209 -0
- package/dist/composites/TextArea/TextArea.cjs +190 -0
- package/dist/composites/TextArea/TextArea.d.cts +95 -0
- package/dist/composites/TextArea/TextArea.d.mts +95 -0
- package/dist/composites/TextArea/TextArea.mjs +181 -0
- package/dist/composites/TextField/TextField.cjs +200 -0
- package/dist/composites/TextField/TextField.d.cts +111 -0
- package/dist/composites/TextField/TextField.d.mts +111 -0
- package/dist/composites/TextField/TextField.mjs +191 -0
- package/dist/composites/Tooltip/Tooltip.cjs +79 -0
- package/dist/composites/Tooltip/Tooltip.d.cts +53 -0
- package/dist/composites/Tooltip/Tooltip.d.mts +53 -0
- package/dist/composites/Tooltip/Tooltip.mjs +77 -0
- package/dist/composites/Wizard/Wizard.cjs +333 -0
- package/dist/composites/Wizard/Wizard.d.cts +206 -0
- package/dist/composites/Wizard/Wizard.d.mts +206 -0
- package/dist/composites/Wizard/Wizard.mjs +324 -0
- package/dist/composites/scope.cjs +124 -0
- package/dist/composites/scope.mjs +121 -0
- package/dist/index.cjs +186 -0
- package/dist/index.d.cts +37 -0
- package/dist/index.d.mts +37 -0
- package/dist/index.mjs +39 -0
- package/dist/semantics/componentMeta.d.cts +37 -0
- package/dist/semantics/componentMeta.d.mts +37 -0
- package/dist/semantics/index.cjs +16 -0
- package/dist/semantics/index.d.cts +4 -0
- package/dist/semantics/index.d.mts +4 -0
- package/dist/semantics/index.mjs +3 -0
- package/dist/semantics/taxonomy.cjs +150 -0
- package/dist/semantics/taxonomy.d.cts +153 -0
- package/dist/semantics/taxonomy.d.mts +153 -0
- package/dist/semantics/taxonomy.mjs +140 -0
- package/dist/tokens/escapeHatch.cjs +13 -0
- package/dist/tokens/escapeHatch.mjs +13 -0
- package/dist/tokens/focusRing.cjs +28 -0
- package/dist/tokens/focusRing.mjs +28 -0
- package/dist/tokens/keyframes.cjs +76 -0
- package/dist/tokens/keyframes.mjs +75 -0
- package/dist/tokens/resolveInteractiveStyle.cjs +41 -0
- package/dist/tokens/resolveInteractiveStyle.mjs +41 -0
- package/llms.txt +142 -0
- package/package.json +70 -0
- package/src/tokens/CONTRACT.md +505 -0
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
|
|
2
|
+
import { focusRingOutline } from "../../tokens/focusRing.mjs";
|
|
3
|
+
import { resolveInteractiveStyle } from "../../tokens/resolveInteractiveStyle.mjs";
|
|
4
|
+
import { Icon } from "../../components/Icon/Icon.mjs";
|
|
5
|
+
import { createCompositeScope } from "../scope.mjs";
|
|
6
|
+
import { vars } from "@ttoss/fsl-theme/vars";
|
|
7
|
+
import { Button, Input, Label, SearchField } from "react-aria-components";
|
|
8
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
|
|
10
|
+
//#region src/composites/SearchField/SearchField.tsx
|
|
11
|
+
var searchFieldScope = createCompositeScope("SearchField");
|
|
12
|
+
/** Formal semantic identity — SearchField root (Input entity). */
|
|
13
|
+
var searchFieldMeta = {
|
|
14
|
+
displayName: "SearchField",
|
|
15
|
+
entity: "Input",
|
|
16
|
+
structure: "root"
|
|
17
|
+
};
|
|
18
|
+
/** Formal semantic identity — label slot. */
|
|
19
|
+
var searchFieldLabelMeta = {
|
|
20
|
+
displayName: "SearchFieldLabel",
|
|
21
|
+
entity: "Input",
|
|
22
|
+
structure: "label",
|
|
23
|
+
composition: "label"
|
|
24
|
+
};
|
|
25
|
+
/** Formal semantic identity — control slot (search box). */
|
|
26
|
+
var searchFieldControlMeta = {
|
|
27
|
+
displayName: "SearchFieldControl",
|
|
28
|
+
entity: "Input",
|
|
29
|
+
structure: "control",
|
|
30
|
+
composition: "control"
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* A search input composite (Input entity). Renders a labelled search box with
|
|
34
|
+
* a leading search glyph and a trailing clear button (shown once there is
|
|
35
|
+
* text). Compose with `SearchFieldLabel` and `SearchFieldControl`.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```tsx
|
|
39
|
+
* <SearchField clearLabel="Clear search" onSubmit={run}>
|
|
40
|
+
* <SearchFieldLabel>Search</SearchFieldLabel>
|
|
41
|
+
* <SearchFieldControl placeholder="Search…" />
|
|
42
|
+
* </SearchField>
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
var SearchField$1 = ({
|
|
46
|
+
clearLabel,
|
|
47
|
+
children,
|
|
48
|
+
...props
|
|
49
|
+
}) => {
|
|
50
|
+
return /* @__PURE__ */jsx(SearchField, {
|
|
51
|
+
...props,
|
|
52
|
+
"data-scope": "search-field",
|
|
53
|
+
"data-part": "root",
|
|
54
|
+
style: {
|
|
55
|
+
boxSizing: "border-box",
|
|
56
|
+
display: "flex",
|
|
57
|
+
flexDirection: "column",
|
|
58
|
+
gap: vars.spacing.gap.stack.xs
|
|
59
|
+
},
|
|
60
|
+
children: /* @__PURE__ */jsx(searchFieldScope.Provider, {
|
|
61
|
+
value: {
|
|
62
|
+
clearLabel
|
|
63
|
+
},
|
|
64
|
+
children
|
|
65
|
+
})
|
|
66
|
+
});
|
|
67
|
+
};
|
|
68
|
+
SearchField$1.displayName = searchFieldMeta.displayName;
|
|
69
|
+
/** The label slot of a SearchField. */
|
|
70
|
+
var SearchFieldLabel = props => {
|
|
71
|
+
searchFieldScope.use(searchFieldLabelMeta.displayName);
|
|
72
|
+
const colors = vars.colors.input.primary;
|
|
73
|
+
return /* @__PURE__ */jsx(Label, {
|
|
74
|
+
...props,
|
|
75
|
+
"data-scope": "search-field",
|
|
76
|
+
"data-part": "label",
|
|
77
|
+
style: {
|
|
78
|
+
color: colors?.text?.default,
|
|
79
|
+
...vars.text.label.md
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
SearchFieldLabel.displayName = searchFieldLabelMeta.displayName;
|
|
84
|
+
var ADORNMENT_INSET = `calc(${vars.sizing.icon.md} + ${vars.spacing.inset.control.md} * 2)`;
|
|
85
|
+
/**
|
|
86
|
+
* The control slot — the search box. Renders the leading search glyph
|
|
87
|
+
* (`leadingAdornment`), the `<input>`, and the trailing clear button
|
|
88
|
+
* (`trailingAdornment`, labelled by the root's `clearLabel`). The clear
|
|
89
|
+
* button is managed by React Aria (hidden while empty).
|
|
90
|
+
*/
|
|
91
|
+
var SearchFieldControl = props => {
|
|
92
|
+
const {
|
|
93
|
+
clearLabel
|
|
94
|
+
} = searchFieldScope.use(searchFieldControlMeta.displayName);
|
|
95
|
+
const colors = vars.colors.input.primary;
|
|
96
|
+
return /* @__PURE__ */jsxs("div", {
|
|
97
|
+
"data-scope": "search-field",
|
|
98
|
+
"data-part": "control",
|
|
99
|
+
style: {
|
|
100
|
+
boxSizing: "border-box",
|
|
101
|
+
position: "relative",
|
|
102
|
+
display: "inline-flex",
|
|
103
|
+
alignItems: "center",
|
|
104
|
+
inlineSize: "100%"
|
|
105
|
+
},
|
|
106
|
+
children: [/* @__PURE__ */jsx("span", {
|
|
107
|
+
"data-scope": "search-field",
|
|
108
|
+
"data-part": "leadingAdornment",
|
|
109
|
+
"aria-hidden": true,
|
|
110
|
+
style: {
|
|
111
|
+
position: "absolute",
|
|
112
|
+
insetInlineStart: vars.spacing.inset.control.md,
|
|
113
|
+
display: "inline-flex",
|
|
114
|
+
color: colors?.text?.default,
|
|
115
|
+
pointerEvents: "none"
|
|
116
|
+
},
|
|
117
|
+
children: /* @__PURE__ */jsx(Icon, {
|
|
118
|
+
intent: "action.search",
|
|
119
|
+
size: "sm"
|
|
120
|
+
})
|
|
121
|
+
}), /* @__PURE__ */jsx(Input, {
|
|
122
|
+
...props,
|
|
123
|
+
"data-scope": "search-field",
|
|
124
|
+
"data-part": "control",
|
|
125
|
+
style: ({
|
|
126
|
+
isHovered,
|
|
127
|
+
isDisabled,
|
|
128
|
+
isFocusVisible,
|
|
129
|
+
isInvalid
|
|
130
|
+
}) => {
|
|
131
|
+
return {
|
|
132
|
+
boxSizing: "border-box",
|
|
133
|
+
inlineSize: "100%",
|
|
134
|
+
minHeight: vars.sizing.hit.base,
|
|
135
|
+
paddingBlock: vars.spacing.inset.control.sm,
|
|
136
|
+
paddingInlineStart: ADORNMENT_INSET,
|
|
137
|
+
paddingInlineEnd: ADORNMENT_INSET,
|
|
138
|
+
borderRadius: vars.radii.control,
|
|
139
|
+
borderWidth: vars.border.outline.control.width,
|
|
140
|
+
borderStyle: vars.border.outline.control.style,
|
|
141
|
+
transitionDuration: vars.motion.feedback.duration,
|
|
142
|
+
transitionTimingFunction: vars.motion.feedback.easing,
|
|
143
|
+
transitionProperty: "background-color, border-color, color",
|
|
144
|
+
backgroundColor: resolveInteractiveStyle(colors?.background, {
|
|
145
|
+
isHovered,
|
|
146
|
+
isDisabled,
|
|
147
|
+
isInvalid
|
|
148
|
+
}),
|
|
149
|
+
borderColor: resolveInteractiveStyle(colors?.border, {
|
|
150
|
+
isDisabled,
|
|
151
|
+
isInvalid,
|
|
152
|
+
isFocusVisible
|
|
153
|
+
}),
|
|
154
|
+
color: resolveInteractiveStyle(colors?.text, {
|
|
155
|
+
isHovered,
|
|
156
|
+
isDisabled,
|
|
157
|
+
isInvalid
|
|
158
|
+
}) ?? colors?.text?.default,
|
|
159
|
+
outline: focusRingOutline(isFocusVisible),
|
|
160
|
+
...vars.text.label.md
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
}), /* @__PURE__ */jsx(Button, {
|
|
164
|
+
"aria-label": clearLabel,
|
|
165
|
+
"data-scope": "search-field",
|
|
166
|
+
"data-part": "trailingAdornment",
|
|
167
|
+
style: {
|
|
168
|
+
position: "absolute",
|
|
169
|
+
insetInlineEnd: vars.spacing.inset.control.md,
|
|
170
|
+
display: "inline-flex",
|
|
171
|
+
alignItems: "center",
|
|
172
|
+
justifyContent: "center",
|
|
173
|
+
cursor: "pointer",
|
|
174
|
+
border: 0,
|
|
175
|
+
background: "transparent",
|
|
176
|
+
color: colors?.text?.default,
|
|
177
|
+
padding: 0
|
|
178
|
+
},
|
|
179
|
+
children: /* @__PURE__ */jsx(Icon, {
|
|
180
|
+
intent: "action.close",
|
|
181
|
+
size: "sm"
|
|
182
|
+
})
|
|
183
|
+
})]
|
|
184
|
+
});
|
|
185
|
+
};
|
|
186
|
+
SearchFieldControl.displayName = searchFieldControlMeta.displayName;
|
|
187
|
+
|
|
188
|
+
//#endregion
|
|
189
|
+
export { SearchField$1 as SearchField, SearchFieldControl, SearchFieldLabel, searchFieldControlMeta, searchFieldLabelMeta, searchFieldMeta };
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
|
|
2
|
+
const require_focusRing = require('../../tokens/focusRing.cjs');
|
|
3
|
+
const require_resolveInteractiveStyle = require('../../tokens/resolveInteractiveStyle.cjs');
|
|
4
|
+
const require_Icon = require('../../components/Icon/Icon.cjs');
|
|
5
|
+
const require_scope = require('../scope.cjs');
|
|
6
|
+
let _ttoss_fsl_theme_vars = require("@ttoss/fsl-theme/vars");
|
|
7
|
+
let react_aria_components = require("react-aria-components");
|
|
8
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
9
|
+
|
|
10
|
+
//#region src/composites/TagGroup/TagGroup.tsx
|
|
11
|
+
var tagGroupScope = require_scope.createCompositeScope("TagGroup");
|
|
12
|
+
/** Formal semantic identity — TagGroup root (Selection entity). */
|
|
13
|
+
var tagGroupMeta = {
|
|
14
|
+
displayName: "TagGroup",
|
|
15
|
+
entity: "Selection",
|
|
16
|
+
structure: "root"
|
|
17
|
+
};
|
|
18
|
+
/** Formal semantic identity — Tag item (Selection entity, one of a set). */
|
|
19
|
+
var tagMeta = {
|
|
20
|
+
displayName: "Tag",
|
|
21
|
+
entity: "Selection",
|
|
22
|
+
structure: "item",
|
|
23
|
+
composition: "selection"
|
|
24
|
+
};
|
|
25
|
+
/** Tag (item) chrome — pill that reflects the `selected` set-membership State. */
|
|
26
|
+
var buildTagStyle = ({
|
|
27
|
+
c,
|
|
28
|
+
isSelected,
|
|
29
|
+
isHovered,
|
|
30
|
+
isFocusVisible,
|
|
31
|
+
isDisabled
|
|
32
|
+
}) => {
|
|
33
|
+
return {
|
|
34
|
+
boxSizing: "border-box",
|
|
35
|
+
display: "inline-flex",
|
|
36
|
+
alignItems: "center",
|
|
37
|
+
gap: _ttoss_fsl_theme_vars.vars.spacing.gap.inline.xs,
|
|
38
|
+
minHeight: _ttoss_fsl_theme_vars.vars.sizing.hit.base,
|
|
39
|
+
paddingBlock: _ttoss_fsl_theme_vars.vars.spacing.inset.control.sm,
|
|
40
|
+
paddingInline: _ttoss_fsl_theme_vars.vars.spacing.inset.control.md,
|
|
41
|
+
borderRadius: _ttoss_fsl_theme_vars.vars.radii.control,
|
|
42
|
+
borderWidth: isSelected ? _ttoss_fsl_theme_vars.vars.border.outline.selected.width : _ttoss_fsl_theme_vars.vars.border.outline.control.width,
|
|
43
|
+
borderStyle: _ttoss_fsl_theme_vars.vars.border.outline.control.style,
|
|
44
|
+
cursor: isDisabled ? "not-allowed" : "pointer",
|
|
45
|
+
opacity: isDisabled ? _ttoss_fsl_theme_vars.vars.opacity.disabled : void 0,
|
|
46
|
+
..._ttoss_fsl_theme_vars.vars.text.label.md,
|
|
47
|
+
transitionProperty: "background-color, border-color, color",
|
|
48
|
+
transitionDuration: _ttoss_fsl_theme_vars.vars.motion.feedback.duration,
|
|
49
|
+
transitionTimingFunction: _ttoss_fsl_theme_vars.vars.motion.feedback.easing,
|
|
50
|
+
backgroundColor: require_resolveInteractiveStyle.resolveInteractiveStyle(c?.background, {
|
|
51
|
+
isDisabled,
|
|
52
|
+
isSelected,
|
|
53
|
+
isHovered
|
|
54
|
+
}),
|
|
55
|
+
borderColor: require_resolveInteractiveStyle.resolveInteractiveStyle(c?.border, {
|
|
56
|
+
isDisabled,
|
|
57
|
+
isSelected,
|
|
58
|
+
isFocusVisible
|
|
59
|
+
}),
|
|
60
|
+
color: require_resolveInteractiveStyle.resolveInteractiveStyle(c?.text, {
|
|
61
|
+
isDisabled,
|
|
62
|
+
isSelected,
|
|
63
|
+
isHovered
|
|
64
|
+
}) ?? c?.text?.default,
|
|
65
|
+
outline: require_focusRing.focusRingOutline(isFocusVisible)
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* A semantic tag group built on React Aria's `TagGroup` — a focusable list of
|
|
70
|
+
* labels, keywords, filters, or chips with keyboard navigation, optional
|
|
71
|
+
* selection, and optional removal.
|
|
72
|
+
*
|
|
73
|
+
* Entity = Selection → reads `vars.colors.input.primary.*`. A chosen tag uses
|
|
74
|
+
* the `selected` State (set membership), never `pressed`. Pass
|
|
75
|
+
* `selectionMode="single|multiple"` to make tags selectable and `onRemove` to
|
|
76
|
+
* make them removable.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```tsx
|
|
80
|
+
* <TagGroup label="Filters" selectionMode="multiple" onRemove={remove}>
|
|
81
|
+
* <Tag id="react">React</Tag>
|
|
82
|
+
* <Tag id="vue">Vue</Tag>
|
|
83
|
+
* </TagGroup>
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
var TagGroup = ({
|
|
87
|
+
label,
|
|
88
|
+
removeLabel = "Remove",
|
|
89
|
+
children,
|
|
90
|
+
...props
|
|
91
|
+
}) => {
|
|
92
|
+
const c = _ttoss_fsl_theme_vars.vars.colors.input.primary;
|
|
93
|
+
return /* @__PURE__ */(0, react_jsx_runtime.jsx)(react_aria_components.TagGroup, {
|
|
94
|
+
...props,
|
|
95
|
+
"data-scope": "tag-group",
|
|
96
|
+
"data-part": "root",
|
|
97
|
+
style: {
|
|
98
|
+
boxSizing: "border-box",
|
|
99
|
+
display: "flex",
|
|
100
|
+
flexDirection: "column",
|
|
101
|
+
gap: _ttoss_fsl_theme_vars.vars.spacing.gap.stack.xs
|
|
102
|
+
},
|
|
103
|
+
children: /* @__PURE__ */(0, react_jsx_runtime.jsxs)(tagGroupScope.Provider, {
|
|
104
|
+
value: {
|
|
105
|
+
removeLabel
|
|
106
|
+
},
|
|
107
|
+
children: [label != null && /* @__PURE__ */(0, react_jsx_runtime.jsx)(react_aria_components.Label, {
|
|
108
|
+
"data-scope": "tag-group",
|
|
109
|
+
"data-part": "label",
|
|
110
|
+
style: {
|
|
111
|
+
..._ttoss_fsl_theme_vars.vars.text.label.md,
|
|
112
|
+
color: c?.text?.default
|
|
113
|
+
},
|
|
114
|
+
children: label
|
|
115
|
+
}), /* @__PURE__ */(0, react_jsx_runtime.jsx)(react_aria_components.TagList, {
|
|
116
|
+
"data-scope": "tag-group",
|
|
117
|
+
"data-part": "list",
|
|
118
|
+
style: {
|
|
119
|
+
boxSizing: "border-box",
|
|
120
|
+
display: "flex",
|
|
121
|
+
flexWrap: "wrap",
|
|
122
|
+
gap: _ttoss_fsl_theme_vars.vars.spacing.gap.inline.sm,
|
|
123
|
+
listStyle: "none",
|
|
124
|
+
margin: 0,
|
|
125
|
+
padding: 0
|
|
126
|
+
},
|
|
127
|
+
children
|
|
128
|
+
})]
|
|
129
|
+
})
|
|
130
|
+
});
|
|
131
|
+
};
|
|
132
|
+
TagGroup.displayName = tagGroupMeta.displayName;
|
|
133
|
+
/**
|
|
134
|
+
* A single tag inside a `TagGroup`. Reflects the `selected` State when picked
|
|
135
|
+
* and renders a remove (close) affordance when the group is removable
|
|
136
|
+
* (`onRemove`). Must be used inside a `TagGroup`.
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```tsx
|
|
140
|
+
* <Tag id="react">React</Tag>
|
|
141
|
+
* ```
|
|
142
|
+
*/
|
|
143
|
+
var Tag = ({
|
|
144
|
+
children,
|
|
145
|
+
textValue,
|
|
146
|
+
...props
|
|
147
|
+
}) => {
|
|
148
|
+
const {
|
|
149
|
+
removeLabel
|
|
150
|
+
} = tagGroupScope.use(tagMeta.displayName);
|
|
151
|
+
const c = _ttoss_fsl_theme_vars.vars.colors.input.primary;
|
|
152
|
+
const resolvedTextValue = textValue ?? (typeof children === "string" ? children : void 0);
|
|
153
|
+
return /* @__PURE__ */(0, react_jsx_runtime.jsx)(react_aria_components.Tag, {
|
|
154
|
+
...props,
|
|
155
|
+
textValue: resolvedTextValue,
|
|
156
|
+
"data-scope": "tag-group",
|
|
157
|
+
"data-part": "item",
|
|
158
|
+
style: ({
|
|
159
|
+
isSelected,
|
|
160
|
+
isHovered,
|
|
161
|
+
isFocusVisible,
|
|
162
|
+
isDisabled
|
|
163
|
+
}) => {
|
|
164
|
+
return buildTagStyle({
|
|
165
|
+
c,
|
|
166
|
+
isSelected,
|
|
167
|
+
isHovered,
|
|
168
|
+
isFocusVisible,
|
|
169
|
+
isDisabled
|
|
170
|
+
});
|
|
171
|
+
},
|
|
172
|
+
children: ({
|
|
173
|
+
allowsRemoving
|
|
174
|
+
}) => {
|
|
175
|
+
return /* @__PURE__ */(0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, {
|
|
176
|
+
children: [/* @__PURE__ */(0, react_jsx_runtime.jsx)("span", {
|
|
177
|
+
"data-scope": "tag-group",
|
|
178
|
+
"data-part": "label",
|
|
179
|
+
children
|
|
180
|
+
}), allowsRemoving && /* @__PURE__ */(0, react_jsx_runtime.jsx)(react_aria_components.Button, {
|
|
181
|
+
slot: "remove",
|
|
182
|
+
"data-scope": "tag-group",
|
|
183
|
+
"data-part": "closeTrigger",
|
|
184
|
+
style: {
|
|
185
|
+
boxSizing: "border-box",
|
|
186
|
+
display: "inline-flex",
|
|
187
|
+
alignItems: "center",
|
|
188
|
+
justifyContent: "center",
|
|
189
|
+
flexShrink: 0,
|
|
190
|
+
border: 0,
|
|
191
|
+
background: "transparent",
|
|
192
|
+
cursor: "pointer",
|
|
193
|
+
padding: 0,
|
|
194
|
+
color: "inherit"
|
|
195
|
+
},
|
|
196
|
+
children: /* @__PURE__ */(0, react_jsx_runtime.jsx)(require_Icon.Icon, {
|
|
197
|
+
intent: "action.close",
|
|
198
|
+
size: "sm",
|
|
199
|
+
label: removeLabel
|
|
200
|
+
})
|
|
201
|
+
})]
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
};
|
|
206
|
+
Tag.displayName = tagMeta.displayName;
|
|
207
|
+
|
|
208
|
+
//#endregion
|
|
209
|
+
exports.Tag = Tag;
|
|
210
|
+
exports.TagGroup = TagGroup;
|
|
211
|
+
exports.tagGroupMeta = tagGroupMeta;
|
|
212
|
+
exports.tagMeta = tagMeta;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { TagGroupProps, TagProps } from "react-aria-components";
|
|
4
|
+
|
|
5
|
+
//#region src/composites/TagGroup/TagGroup.d.ts
|
|
6
|
+
/** Formal semantic identity — TagGroup root (Selection entity). */
|
|
7
|
+
declare const tagGroupMeta: {
|
|
8
|
+
readonly displayName: "TagGroup";
|
|
9
|
+
readonly entity: "Selection";
|
|
10
|
+
readonly structure: "root";
|
|
11
|
+
};
|
|
12
|
+
/** Formal semantic identity — Tag item (Selection entity, one of a set). */
|
|
13
|
+
declare const tagMeta: {
|
|
14
|
+
readonly displayName: "Tag";
|
|
15
|
+
readonly entity: "Selection";
|
|
16
|
+
readonly structure: "item";
|
|
17
|
+
readonly composition: "selection";
|
|
18
|
+
};
|
|
19
|
+
/** Props for the TagGroup component. */
|
|
20
|
+
interface TagGroupProps$1 extends Omit<TagGroupProps, 'style' | 'children' | 'className'> {
|
|
21
|
+
/** Group label displayed above the tags. */
|
|
22
|
+
label?: React.ReactNode;
|
|
23
|
+
/**
|
|
24
|
+
* Accessible name for each tag's remove button (the icon is the sole carrier
|
|
25
|
+
* of meaning). Documented English fallback, overridable (i18n rule §6.2).
|
|
26
|
+
* Only rendered when the group is removable (`onRemove` set).
|
|
27
|
+
* @default 'Remove'
|
|
28
|
+
*/
|
|
29
|
+
removeLabel?: string;
|
|
30
|
+
/** `Tag` children. */
|
|
31
|
+
children?: React.ReactNode;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* A semantic tag group built on React Aria's `TagGroup` — a focusable list of
|
|
35
|
+
* labels, keywords, filters, or chips with keyboard navigation, optional
|
|
36
|
+
* selection, and optional removal.
|
|
37
|
+
*
|
|
38
|
+
* Entity = Selection → reads `vars.colors.input.primary.*`. A chosen tag uses
|
|
39
|
+
* the `selected` State (set membership), never `pressed`. Pass
|
|
40
|
+
* `selectionMode="single|multiple"` to make tags selectable and `onRemove` to
|
|
41
|
+
* make them removable.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```tsx
|
|
45
|
+
* <TagGroup label="Filters" selectionMode="multiple" onRemove={remove}>
|
|
46
|
+
* <Tag id="react">React</Tag>
|
|
47
|
+
* <Tag id="vue">Vue</Tag>
|
|
48
|
+
* </TagGroup>
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
declare const TagGroup: {
|
|
52
|
+
({
|
|
53
|
+
label,
|
|
54
|
+
removeLabel,
|
|
55
|
+
children,
|
|
56
|
+
...props
|
|
57
|
+
}: TagGroupProps$1): import("react/jsx-runtime").JSX.Element;
|
|
58
|
+
displayName: "TagGroup";
|
|
59
|
+
};
|
|
60
|
+
/** Props for the Tag component. */
|
|
61
|
+
interface TagProps$1 extends Omit<TagProps, 'style' | 'className'> {
|
|
62
|
+
/** Tag label content. */
|
|
63
|
+
children?: React.ReactNode;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* A single tag inside a `TagGroup`. Reflects the `selected` State when picked
|
|
67
|
+
* and renders a remove (close) affordance when the group is removable
|
|
68
|
+
* (`onRemove`). Must be used inside a `TagGroup`.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```tsx
|
|
72
|
+
* <Tag id="react">React</Tag>
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
declare const Tag: {
|
|
76
|
+
({
|
|
77
|
+
children,
|
|
78
|
+
textValue,
|
|
79
|
+
...props
|
|
80
|
+
}: TagProps$1): import("react/jsx-runtime").JSX.Element;
|
|
81
|
+
displayName: "Tag";
|
|
82
|
+
};
|
|
83
|
+
//#endregion
|
|
84
|
+
export { Tag, TagGroup, TagGroupProps$1 as TagGroupProps, TagProps$1 as TagProps, tagGroupMeta, tagMeta };
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
|
|
2
|
+
import { TagGroupProps, TagProps } from "react-aria-components";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
|
|
5
|
+
//#region src/composites/TagGroup/TagGroup.d.ts
|
|
6
|
+
/** Formal semantic identity — TagGroup root (Selection entity). */
|
|
7
|
+
declare const tagGroupMeta: {
|
|
8
|
+
readonly displayName: "TagGroup";
|
|
9
|
+
readonly entity: "Selection";
|
|
10
|
+
readonly structure: "root";
|
|
11
|
+
};
|
|
12
|
+
/** Formal semantic identity — Tag item (Selection entity, one of a set). */
|
|
13
|
+
declare const tagMeta: {
|
|
14
|
+
readonly displayName: "Tag";
|
|
15
|
+
readonly entity: "Selection";
|
|
16
|
+
readonly structure: "item";
|
|
17
|
+
readonly composition: "selection";
|
|
18
|
+
};
|
|
19
|
+
/** Props for the TagGroup component. */
|
|
20
|
+
interface TagGroupProps$1 extends Omit<TagGroupProps, 'style' | 'children' | 'className'> {
|
|
21
|
+
/** Group label displayed above the tags. */
|
|
22
|
+
label?: React.ReactNode;
|
|
23
|
+
/**
|
|
24
|
+
* Accessible name for each tag's remove button (the icon is the sole carrier
|
|
25
|
+
* of meaning). Documented English fallback, overridable (i18n rule §6.2).
|
|
26
|
+
* Only rendered when the group is removable (`onRemove` set).
|
|
27
|
+
* @default 'Remove'
|
|
28
|
+
*/
|
|
29
|
+
removeLabel?: string;
|
|
30
|
+
/** `Tag` children. */
|
|
31
|
+
children?: React.ReactNode;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* A semantic tag group built on React Aria's `TagGroup` — a focusable list of
|
|
35
|
+
* labels, keywords, filters, or chips with keyboard navigation, optional
|
|
36
|
+
* selection, and optional removal.
|
|
37
|
+
*
|
|
38
|
+
* Entity = Selection → reads `vars.colors.input.primary.*`. A chosen tag uses
|
|
39
|
+
* the `selected` State (set membership), never `pressed`. Pass
|
|
40
|
+
* `selectionMode="single|multiple"` to make tags selectable and `onRemove` to
|
|
41
|
+
* make them removable.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```tsx
|
|
45
|
+
* <TagGroup label="Filters" selectionMode="multiple" onRemove={remove}>
|
|
46
|
+
* <Tag id="react">React</Tag>
|
|
47
|
+
* <Tag id="vue">Vue</Tag>
|
|
48
|
+
* </TagGroup>
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
declare const TagGroup$1: {
|
|
52
|
+
({
|
|
53
|
+
label,
|
|
54
|
+
removeLabel,
|
|
55
|
+
children,
|
|
56
|
+
...props
|
|
57
|
+
}: TagGroupProps$1): import("react/jsx-runtime").JSX.Element;
|
|
58
|
+
displayName: "TagGroup";
|
|
59
|
+
};
|
|
60
|
+
/** Props for the Tag component. */
|
|
61
|
+
interface TagProps$1 extends Omit<TagProps, 'style' | 'className'> {
|
|
62
|
+
/** Tag label content. */
|
|
63
|
+
children?: React.ReactNode;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* A single tag inside a `TagGroup`. Reflects the `selected` State when picked
|
|
67
|
+
* and renders a remove (close) affordance when the group is removable
|
|
68
|
+
* (`onRemove`). Must be used inside a `TagGroup`.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```tsx
|
|
72
|
+
* <Tag id="react">React</Tag>
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
declare const Tag$1: {
|
|
76
|
+
({
|
|
77
|
+
children,
|
|
78
|
+
textValue,
|
|
79
|
+
...props
|
|
80
|
+
}: TagProps$1): import("react/jsx-runtime").JSX.Element;
|
|
81
|
+
displayName: "Tag";
|
|
82
|
+
};
|
|
83
|
+
//#endregion
|
|
84
|
+
export { Tag$1 as Tag, TagGroup$1 as TagGroup, TagGroupProps$1 as TagGroupProps, TagProps$1 as TagProps, tagGroupMeta, tagMeta };
|