@local-civics/hub-ui 0.1.97 → 0.1.98
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.js +50 -26
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +50 -26
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -3816,23 +3816,30 @@ const CheckboxQuestion = (props) => {
|
|
|
3816
3816
|
props.onResponseChange(newResponses);
|
|
3817
3817
|
}
|
|
3818
3818
|
};
|
|
3819
|
+
let isOneChecked = false;
|
|
3820
|
+
React__default.useEffect(() => {
|
|
3821
|
+
}, []);
|
|
3819
3822
|
return /* @__PURE__ */ React__default.createElement("fieldset", { className: "grid grid-cols-1 gap-y-8" }, options.map((option) => {
|
|
3823
|
+
isOneChecked = Object.keys(values).length ? true : false;
|
|
3820
3824
|
return /* @__PURE__ */ React__default.createElement("div", { key: option }, /* @__PURE__ */ React__default.createElement("label", { className: "flex gap-x-4 items-center" }, /* @__PURE__ */ React__default.createElement(
|
|
3821
3825
|
"input",
|
|
3822
3826
|
{
|
|
3827
|
+
id: "checkbox",
|
|
3823
3828
|
disabled: props.disabled,
|
|
3824
3829
|
className: "cursor-pointer shrink-0",
|
|
3830
|
+
required: props.required && !isOneChecked,
|
|
3825
3831
|
checked: values[option] || !option && values[`Other: ${response}`],
|
|
3826
3832
|
onChange: option ? onChange : onOtherChange,
|
|
3827
3833
|
type: "checkbox",
|
|
3828
3834
|
value: option || response,
|
|
3829
3835
|
name: displayNameString(props.displayName)
|
|
3830
3836
|
}
|
|
3831
|
-
), option && /* @__PURE__ */ React__default.createElement("div", null, option), !option && /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, "Other: ", /* @__PURE__ */ React__default.createElement(
|
|
3837
|
+
), option && /* @__PURE__ */ React__default.createElement("div", null, option), !option && /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, "Other:", " ", /* @__PURE__ */ React__default.createElement(
|
|
3832
3838
|
"input",
|
|
3833
3839
|
{
|
|
3834
|
-
className: "w-full px-3 py-2 bg-white text-slate-500 focus:text-slate-600 text-sm placeholder-slate-400 border border-slate-300 rounded-sm shadow-sm\n focus:outline-none focus:ring-1 focus:ring-sky-500",
|
|
3840
|
+
className: "w-full px-3 py-2 bg-white text-slate-500 focus:text-slate-600 text-sm placeholder-slate-400 border border-slate-300 rounded-sm shadow-sm\r\n focus:outline-none focus:ring-1 focus:ring-sky-500",
|
|
3835
3841
|
value: isOtherResponse ? response : "",
|
|
3842
|
+
required: props.required,
|
|
3836
3843
|
disabled: props.disabled,
|
|
3837
3844
|
onChange: onOtherChange,
|
|
3838
3845
|
placeholder: "Input another option",
|
|
@@ -3903,7 +3910,7 @@ const FileUploadQuestion = (props) => {
|
|
|
3903
3910
|
onChange: onImageUpload,
|
|
3904
3911
|
name: "image",
|
|
3905
3912
|
type: "file",
|
|
3906
|
-
className: "block w-full text-sm text-slate-500 disabled:text-gray-600\n file:mr-4 file:py-2 file:px-4\n file:rounded-full file:border-0\n file:text-sm file:font-semibold\n file:bg-violet-50 file:text-violet-700\n hover:file:bg-violet-100"
|
|
3913
|
+
className: "block w-full text-sm text-slate-500 disabled:text-gray-600\r\n file:mr-4 file:py-2 file:px-4\r\n file:rounded-full file:border-0\r\n file:text-sm file:font-semibold\r\n file:bg-violet-50 file:text-violet-700\r\n hover:file:bg-violet-100"
|
|
3907
3914
|
}
|
|
3908
3915
|
))), /* @__PURE__ */ React__default.createElement("div", { className: "-ml-2" }, /* @__PURE__ */ React__default.createElement(
|
|
3909
3916
|
"input",
|
|
@@ -3915,7 +3922,7 @@ const FileUploadQuestion = (props) => {
|
|
|
3915
3922
|
onChange,
|
|
3916
3923
|
value: imageURL,
|
|
3917
3924
|
placeholder: "Paste a url or select a file above",
|
|
3918
|
-
className: "w-full mt-1 block px-3 py-2 bg-white text-slate-500 focus:text-slate-600 border border-slate-300 rounded-sm text-sm shadow-sm placeholder-slate-400\n focus:outline-none focus:border-sky-500 focus:ring-1 focus:ring-sky-500\n disabled:bg-slate-50 disabled:text-gray-600 disabled:border-slate-200 disabled:shadow-none"
|
|
3925
|
+
className: "w-full mt-1 block px-3 py-2 bg-white text-slate-500 focus:text-slate-600 border border-slate-300 rounded-sm text-sm shadow-sm placeholder-slate-400\r\n focus:outline-none focus:border-sky-500 focus:ring-1 focus:ring-sky-500\r\n disabled:bg-slate-50 disabled:text-gray-600 disabled:border-slate-200 disabled:shadow-none"
|
|
3919
3926
|
}
|
|
3920
3927
|
)));
|
|
3921
3928
|
};
|
|
@@ -3931,7 +3938,7 @@ const TextQuestion = (props) => {
|
|
|
3931
3938
|
return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, !props.paragraph && /* @__PURE__ */ React__default.createElement(
|
|
3932
3939
|
"input",
|
|
3933
3940
|
{
|
|
3934
|
-
className: "mt-1 block w-full px-3 py-2 bg-white text-slate-500 focus:text-slate-600 text-sm placeholder-slate-400 border border-slate-300 rounded-sm shadow-sm\n focus:outline-none focus:ring-1 focus:ring-sky-500 focus:border-sky-500\n disabled:bg-slate-50 disabled:text-gray-600 disabled:border-slate-200 disabled:shadow-none",
|
|
3941
|
+
className: "mt-1 block w-full px-3 py-2 bg-white text-slate-500 focus:text-slate-600 text-sm placeholder-slate-400 border border-slate-300 rounded-sm shadow-sm\r\n focus:outline-none focus:ring-1 focus:ring-sky-500 focus:border-sky-500\r\n disabled:bg-slate-50 disabled:text-gray-600 disabled:border-slate-200 disabled:shadow-none",
|
|
3935
3942
|
required: props.required,
|
|
3936
3943
|
minLength: minimum,
|
|
3937
3944
|
onChange,
|
|
@@ -3945,7 +3952,7 @@ const TextQuestion = (props) => {
|
|
|
3945
3952
|
), props.paragraph && /* @__PURE__ */ React__default.createElement(
|
|
3946
3953
|
"textarea",
|
|
3947
3954
|
{
|
|
3948
|
-
className: "resize-none text-slate-500 focus:text-slate-600 h-24 mt-1 block w-full px-3 py-2 bg-white border border-slate-300 rounded-sm text-sm shadow-sm placeholder-slate-400\n focus:outline-none focus:border-sky-500 focus:ring-1 focus:ring-sky-500\n disabled:bg-slate-50 disabled:text-gray-600 disabled:border-slate-200 disabled:shadow-none",
|
|
3955
|
+
className: "resize-none text-slate-500 focus:text-slate-600 h-24 mt-1 block w-full px-3 py-2 bg-white border border-slate-300 rounded-sm text-sm shadow-sm placeholder-slate-400\r\n focus:outline-none focus:border-sky-500 focus:ring-1 focus:ring-sky-500\r\n disabled:bg-slate-50 disabled:text-gray-600 disabled:border-slate-200 disabled:shadow-none",
|
|
3949
3956
|
required: props.required,
|
|
3950
3957
|
minLength: minimum,
|
|
3951
3958
|
onChange,
|
|
@@ -3968,7 +3975,7 @@ const DateQuestion = (props) => {
|
|
|
3968
3975
|
return /* @__PURE__ */ React__default.createElement(
|
|
3969
3976
|
"input",
|
|
3970
3977
|
{
|
|
3971
|
-
className: "mt-1 block w-full px-3 pt-3 pb-2 bg-white text-slate-500 focus:text-slate-600 border border-slate-300 rounded-sm text-sm shadow-sm placeholder-slate-400\n focus:outline-none focus:border-sky-500 focus:ring-1 focus:ring-sky-500\n disabled:bg-slate-50 disabled:text-gray-600 disabled:border-slate-200 disabled:shadow-none",
|
|
3978
|
+
className: "mt-1 block w-full px-3 pt-3 pb-2 bg-white text-slate-500 focus:text-slate-600 border border-slate-300 rounded-sm text-sm shadow-sm placeholder-slate-400\r\n focus:outline-none focus:border-sky-500 focus:ring-1 focus:ring-sky-500\r\n disabled:bg-slate-50 disabled:text-gray-600 disabled:border-slate-200 disabled:shadow-none",
|
|
3972
3979
|
required: props.required,
|
|
3973
3980
|
onChange,
|
|
3974
3981
|
name: displayNameString(props.displayName),
|
|
@@ -3989,7 +3996,7 @@ const TimeQuestion = (props) => {
|
|
|
3989
3996
|
return /* @__PURE__ */ React__default.createElement(
|
|
3990
3997
|
"input",
|
|
3991
3998
|
{
|
|
3992
|
-
className: "mt-1 block w-full px-3 pt-3 pb-2 bg-white text-slate-500 focus:text-slate-600 border border-slate-300 rounded-sm text-sm shadow-sm placeholder-slate-400\n focus:outline-none focus:border-sky-500 focus:ring-1 focus:ring-sky-500\n disabled:bg-slate-50 disabled:text-gray-600 disabled:border-slate-200 disabled:shadow-none",
|
|
3999
|
+
className: "mt-1 block w-full px-3 pt-3 pb-2 bg-white text-slate-500 focus:text-slate-600 border border-slate-300 rounded-sm text-sm shadow-sm placeholder-slate-400\r\n focus:outline-none focus:border-sky-500 focus:ring-1 focus:ring-sky-500\r\n disabled:bg-slate-50 disabled:text-gray-600 disabled:border-slate-200 disabled:shadow-none",
|
|
3993
4000
|
required: props.required,
|
|
3994
4001
|
onChange,
|
|
3995
4002
|
name: displayNameString(props.displayName),
|
|
@@ -4045,7 +4052,15 @@ const Image = (props) => {
|
|
|
4045
4052
|
return;
|
|
4046
4053
|
}
|
|
4047
4054
|
};
|
|
4048
|
-
return /* @__PURE__ */ React__default.createElement("div", { className: "relative max-w-[25rem] md:max-w-[40rem] md:w-[40rem] overflow-hidden" }, /* @__PURE__ */ React__default.createElement(
|
|
4055
|
+
return /* @__PURE__ */ React__default.createElement("div", { className: "relative max-w-[25rem] md:max-w-[40rem] md:w-[40rem] overflow-hidden" }, /* @__PURE__ */ React__default.createElement(
|
|
4056
|
+
"img",
|
|
4057
|
+
{
|
|
4058
|
+
referrerPolicy: "no-referrer",
|
|
4059
|
+
className: `h-full max-h-[25rem] w-full object-cover ${scale}`,
|
|
4060
|
+
alt: displayNameString(props.displayName),
|
|
4061
|
+
src: props.url
|
|
4062
|
+
}
|
|
4063
|
+
), /* @__PURE__ */ React__default.createElement("div", { className: "absolute rounded-sm shadow-md bottom-5 right-5 z-5 bg-gray-100 font-bold" }, /* @__PURE__ */ React__default.createElement("span", { className: "p-5 cursor-pointer text-md text-gray-400 hover:text-gray-600", onClick: scaleUp }, "+"), /* @__PURE__ */ React__default.createElement("span", { className: "p-5 cursor-pointer text-xl text-gray-400 hover:text-gray-600", onClick: scaleDown }, "-")));
|
|
4049
4064
|
};
|
|
4050
4065
|
const Embed = (props) => {
|
|
4051
4066
|
return /* @__PURE__ */ React__default.createElement("div", { className: "max-w-[25rem] md:max-w-[40rem] md:w-[40rem]" }, /* @__PURE__ */ React__default.createElement(
|
|
@@ -4120,11 +4135,14 @@ const autoSave = (run, func, callback) => {
|
|
|
4120
4135
|
let timeout;
|
|
4121
4136
|
return (items, reflection, rating) => {
|
|
4122
4137
|
clearTimeout(timeout);
|
|
4123
|
-
timeout = setTimeout(
|
|
4124
|
-
|
|
4125
|
-
callback
|
|
4126
|
-
|
|
4127
|
-
|
|
4138
|
+
timeout = setTimeout(
|
|
4139
|
+
async () => run && func && await func(items, reflection, rating).then((e) => {
|
|
4140
|
+
if (!e && callback) {
|
|
4141
|
+
callback();
|
|
4142
|
+
}
|
|
4143
|
+
}),
|
|
4144
|
+
AUTOSAVE_TIMEOUT
|
|
4145
|
+
);
|
|
4128
4146
|
return timeout;
|
|
4129
4147
|
};
|
|
4130
4148
|
};
|
|
@@ -4136,7 +4154,10 @@ const LearningForm = (props) => {
|
|
|
4136
4154
|
const [showExitDialogue, setShowExitDialogue] = React__default.useState(false);
|
|
4137
4155
|
const [showSubmitDialogue, setShowSubmitDialogue] = React__default.useState(false);
|
|
4138
4156
|
const [isDraft, setIsDraft] = React__default.useState(false);
|
|
4139
|
-
const autoSaveHandler = useCallback(
|
|
4157
|
+
const autoSaveHandler = useCallback(
|
|
4158
|
+
autoSave(isDraft, props.onSaveDraft, () => setIsDraft(false)),
|
|
4159
|
+
[isDraft]
|
|
4160
|
+
);
|
|
4140
4161
|
const saveVisibility = isDraft ? "opacity-100 visible" : "opacity-0 invisible";
|
|
4141
4162
|
const answers = [];
|
|
4142
4163
|
const saveDraft = async () => {
|
|
@@ -4155,7 +4176,7 @@ const LearningForm = (props) => {
|
|
|
4155
4176
|
}
|
|
4156
4177
|
});
|
|
4157
4178
|
const canReflect = !!reflection || answeredAllRequired;
|
|
4158
|
-
|
|
4179
|
+
answeredAllRequired && reflection.length >= MIN_REFLECTION_LENGTH;
|
|
4159
4180
|
const items = props.items || [];
|
|
4160
4181
|
const currentAnswersKey = answers && answers.length > 0 ? JSON.stringify(answers) : null;
|
|
4161
4182
|
React__default.useEffect(() => {
|
|
@@ -4216,15 +4237,7 @@ const LearningForm = (props) => {
|
|
|
4216
4237
|
/* @__PURE__ */ React__default.createElement("div", { className: "w-3 h-3 min-w-3" }, /* @__PURE__ */ React__default.createElement(Icon$1, { name: "leftArrow" })),
|
|
4217
4238
|
/* @__PURE__ */ React__default.createElement("span", { className: "text-md" }, "Back")
|
|
4218
4239
|
), !!props.displayName && /* @__PURE__ */ React__default.createElement("h2", { className: "h-max font-semibold text-2xl" }, props.displayName), !!props.description && /* @__PURE__ */ React__default.createElement("p", { className: "h-max max-h-[14rem] overflow-y-auto whitespace-pre-line" }, props.description), !!props.eta && /* @__PURE__ */ React__default.createElement("p", { className: "text-sm h-max font-semibold" }, "Estimated Completion Time: ", props.eta)), /* @__PURE__ */ React__default.createElement("img", { className: "grow h-full max-h-[30rem] w-full object-cover", alt: props.displayName, src: props.imageURL })), /* @__PURE__ */ React__default.createElement("form", { className: "w-full max-w-[62.5rem] m-auto grid grid-cols-1 gap-y-12", onSubmit }, items.map((item) => {
|
|
4219
|
-
return /* @__PURE__ */ React__default.createElement(
|
|
4220
|
-
FormItem,
|
|
4221
|
-
__spreadProps$6(__spreadValues$8({
|
|
4222
|
-
key: item.itemId
|
|
4223
|
-
}, item), {
|
|
4224
|
-
minText: 0,
|
|
4225
|
-
disabled: !!props.preview
|
|
4226
|
-
})
|
|
4227
|
-
);
|
|
4240
|
+
return /* @__PURE__ */ React__default.createElement(FormItem, __spreadProps$6(__spreadValues$8({ key: item.itemId }, item), { minText: 0, disabled: !!props.preview }));
|
|
4228
4241
|
}), /* @__PURE__ */ React__default.createElement(
|
|
4229
4242
|
FormItem,
|
|
4230
4243
|
{
|
|
@@ -4239,7 +4252,18 @@ const LearningForm = (props) => {
|
|
|
4239
4252
|
minText: MIN_REFLECTION_LENGTH,
|
|
4240
4253
|
responses: reflection ? [reflection] : void 0
|
|
4241
4254
|
}
|
|
4242
|
-
), /* @__PURE__ */ React__default.createElement(FormItem, null, /* @__PURE__ */ React__default.createElement(Rating, { disabled: !canReflect || !!props.preview, rating, setRating })), !props.preview && /* @__PURE__ */ React__default.createElement("div", { className: "w-max m-auto" }, /* @__PURE__ */ React__default.createElement(
|
|
4255
|
+
), /* @__PURE__ */ React__default.createElement(FormItem, null, /* @__PURE__ */ React__default.createElement(Rating, { disabled: !canReflect || !!props.preview, rating, setRating })), !props.preview && /* @__PURE__ */ React__default.createElement("div", { className: "w-max m-auto" }, /* @__PURE__ */ React__default.createElement(
|
|
4256
|
+
Button,
|
|
4257
|
+
{
|
|
4258
|
+
type: "submit",
|
|
4259
|
+
color: "blue",
|
|
4260
|
+
size: "md",
|
|
4261
|
+
spacing: "md",
|
|
4262
|
+
border: "rounded",
|
|
4263
|
+
theme: "dark",
|
|
4264
|
+
text: "Submit"
|
|
4265
|
+
}
|
|
4266
|
+
))), !props.preview && /* @__PURE__ */ React__default.createElement("div", { className: `fixed bottom-10 right-14 transition ease-in-out ${saveVisibility}` }, /* @__PURE__ */ React__default.createElement(
|
|
4243
4267
|
Button,
|
|
4244
4268
|
{
|
|
4245
4269
|
type: "button",
|