@tanstack/cta-ui-base 0.24.1 → 0.25.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/dist/components/sidebar-items/add-ons.js +1 -0
- package/dist/store/add-ons.d.ts +1 -0
- package/dist/store/add-ons.js +2 -0
- package/dist/store/project.d.ts +1 -0
- package/dist/store/project.js +29 -9
- package/package.json +2 -2
- package/src/components/sidebar-items/add-ons.tsx +1 -0
- package/src/store/add-ons.ts +3 -0
- package/src/store/project.ts +36 -11
- package/src/types.d.ts +1 -1
package/dist/store/add-ons.d.ts
CHANGED
package/dist/store/add-ons.js
CHANGED
|
@@ -5,6 +5,7 @@ export function getAddOnStatus(availableAddOns, chosenAddOns, originalAddOns) {
|
|
|
5
5
|
selected: false,
|
|
6
6
|
enabled: true,
|
|
7
7
|
dependedUpon: false,
|
|
8
|
+
isSingleSelect: addOn.type === 'host' ? addOn.type : undefined,
|
|
8
9
|
});
|
|
9
10
|
}
|
|
10
11
|
// Guard against cycles in the dependency graph. The results won't be great. But it won't crash.
|
|
@@ -54,6 +55,7 @@ export function getAddOnStatus(availableAddOns, chosenAddOns, originalAddOns) {
|
|
|
54
55
|
{
|
|
55
56
|
enabled: addOn.enabled,
|
|
56
57
|
selected: addOn.selected,
|
|
58
|
+
isSingleSelect: addOn.isSingleSelect,
|
|
57
59
|
},
|
|
58
60
|
]));
|
|
59
61
|
}
|
package/dist/store/project.d.ts
CHANGED
package/dist/store/project.js
CHANGED
|
@@ -105,16 +105,36 @@ export function useAddOns() {
|
|
|
105
105
|
const toggleAddOn = useCallback((addOnId) => {
|
|
106
106
|
if (!ready)
|
|
107
107
|
return;
|
|
108
|
-
if (addOnState[addOnId].
|
|
109
|
-
if (addOnState[addOnId].selected) {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
108
|
+
if (addOnState[addOnId].isSingleSelect) {
|
|
109
|
+
if (!addOnState[addOnId].selected) {
|
|
110
|
+
// Find the currently selected addOn with the same isSingleSelect value and unselect it
|
|
111
|
+
const singleSelectType = addOnState[addOnId].isSingleSelect;
|
|
112
|
+
const currentlySelected = Object.keys(addOnState).find((id) => id !== addOnId &&
|
|
113
|
+
addOnState[id].isSingleSelect === singleSelectType &&
|
|
114
|
+
addOnState[id].selected);
|
|
115
|
+
useMutableAddOns.setState((state) => {
|
|
116
|
+
let newUserSelectedAddOns = state.userSelectedAddOns.filter((id) => id !== currentlySelected);
|
|
117
|
+
if (!newUserSelectedAddOns.includes(addOnId)) {
|
|
118
|
+
newUserSelectedAddOns = [...newUserSelectedAddOns, addOnId];
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
userSelectedAddOns: newUserSelectedAddOns,
|
|
122
|
+
};
|
|
123
|
+
});
|
|
113
124
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
if (addOnState[addOnId].enabled) {
|
|
128
|
+
if (addOnState[addOnId].selected) {
|
|
129
|
+
useMutableAddOns.setState((state) => ({
|
|
130
|
+
userSelectedAddOns: state.userSelectedAddOns.filter((addOn) => addOn !== addOnId),
|
|
131
|
+
}));
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
useMutableAddOns.setState((state) => ({
|
|
135
|
+
userSelectedAddOns: [...state.userSelectedAddOns, addOnId],
|
|
136
|
+
}));
|
|
137
|
+
}
|
|
118
138
|
}
|
|
119
139
|
}
|
|
120
140
|
}, [ready, addOnState]);
|
package/package.json
CHANGED
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"sonner": "^2.0.3",
|
|
37
37
|
"tailwind-merge": "^3.0.2",
|
|
38
38
|
"zustand": "^5.0.3",
|
|
39
|
-
"@tanstack/cta-engine": "0.
|
|
39
|
+
"@tanstack/cta-engine": "0.25.1"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@types/react": "^19.0.8",
|
|
@@ -45,6 +45,6 @@
|
|
|
45
45
|
"vite-tsconfig-paths": "^5.1.4",
|
|
46
46
|
"vitest": "^3.1.4"
|
|
47
47
|
},
|
|
48
|
-
"version": "0.
|
|
48
|
+
"version": "0.25.1",
|
|
49
49
|
"scripts": {}
|
|
50
50
|
}
|
package/src/store/add-ons.ts
CHANGED
|
@@ -11,6 +11,7 @@ export function getAddOnStatus(
|
|
|
11
11
|
enabled: boolean
|
|
12
12
|
selected: boolean
|
|
13
13
|
dependedUpon: boolean
|
|
14
|
+
isSingleSelect: string | undefined
|
|
14
15
|
}
|
|
15
16
|
>()
|
|
16
17
|
|
|
@@ -19,6 +20,7 @@ export function getAddOnStatus(
|
|
|
19
20
|
selected: false,
|
|
20
21
|
enabled: true,
|
|
21
22
|
dependedUpon: false,
|
|
23
|
+
isSingleSelect: addOn.type === 'host' ? addOn.type : undefined,
|
|
22
24
|
})
|
|
23
25
|
}
|
|
24
26
|
|
|
@@ -75,6 +77,7 @@ export function getAddOnStatus(
|
|
|
75
77
|
{
|
|
76
78
|
enabled: addOn.enabled,
|
|
77
79
|
selected: addOn.selected,
|
|
80
|
+
isSingleSelect: addOn.isSingleSelect,
|
|
78
81
|
},
|
|
79
82
|
]),
|
|
80
83
|
)
|
package/src/store/project.ts
CHANGED
|
@@ -140,17 +140,42 @@ export function useAddOns() {
|
|
|
140
140
|
const toggleAddOn = useCallback(
|
|
141
141
|
(addOnId: string) => {
|
|
142
142
|
if (!ready) return
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
143
|
+
|
|
144
|
+
if (addOnState[addOnId].isSingleSelect) {
|
|
145
|
+
if (!addOnState[addOnId].selected) {
|
|
146
|
+
// Find the currently selected addOn with the same isSingleSelect value and unselect it
|
|
147
|
+
const singleSelectType = addOnState[addOnId].isSingleSelect
|
|
148
|
+
const currentlySelected = Object.keys(addOnState).find(
|
|
149
|
+
(id) =>
|
|
150
|
+
id !== addOnId &&
|
|
151
|
+
addOnState[id].isSingleSelect === singleSelectType &&
|
|
152
|
+
addOnState[id].selected,
|
|
153
|
+
)
|
|
154
|
+
useMutableAddOns.setState((state) => {
|
|
155
|
+
let newUserSelectedAddOns = state.userSelectedAddOns.filter(
|
|
156
|
+
(id) => id !== currentlySelected, // remove the previously selected one
|
|
157
|
+
)
|
|
158
|
+
if (!newUserSelectedAddOns.includes(addOnId)) {
|
|
159
|
+
newUserSelectedAddOns = [...newUserSelectedAddOns, addOnId]
|
|
160
|
+
}
|
|
161
|
+
return {
|
|
162
|
+
userSelectedAddOns: newUserSelectedAddOns,
|
|
163
|
+
}
|
|
164
|
+
})
|
|
165
|
+
}
|
|
166
|
+
} else {
|
|
167
|
+
if (addOnState[addOnId].enabled) {
|
|
168
|
+
if (addOnState[addOnId].selected) {
|
|
169
|
+
useMutableAddOns.setState((state) => ({
|
|
170
|
+
userSelectedAddOns: state.userSelectedAddOns.filter(
|
|
171
|
+
(addOn) => addOn !== addOnId,
|
|
172
|
+
),
|
|
173
|
+
}))
|
|
174
|
+
} else {
|
|
175
|
+
useMutableAddOns.setState((state) => ({
|
|
176
|
+
userSelectedAddOns: [...state.userSelectedAddOns, addOnId],
|
|
177
|
+
}))
|
|
178
|
+
}
|
|
154
179
|
}
|
|
155
180
|
}
|
|
156
181
|
},
|
package/src/types.d.ts
CHANGED
|
@@ -32,7 +32,7 @@ export type AddOnInfo = {
|
|
|
32
32
|
id: string
|
|
33
33
|
name: string
|
|
34
34
|
description: string
|
|
35
|
-
type: 'add-on' | 'example' | 'starter' | 'toolchain'
|
|
35
|
+
type: 'add-on' | 'example' | 'starter' | 'toolchain' | 'host'
|
|
36
36
|
modes: Array<string>
|
|
37
37
|
smallLogo?: string
|
|
38
38
|
logo?: string
|