@codecademy/gamut
71.0.071.0.1-alpha.c9e50f.0
~
Modified (14 files)
Index: package/dist/ConnectedForm/ConnectedInputs/ConnectedCheckbox.js
===================================================================
--- package/dist/ConnectedForm/ConnectedInputs/ConnectedCheckbox.js
+++ package/dist/ConnectedForm/ConnectedInputs/ConnectedCheckbox.js
@@ -12,18 +12,20 @@
'aria-label': ariaLabel,
multiline,
name,
onUpdate,
- spacing
+ spacing,
+ customValidations
}) => {
const {
isDisabled,
control,
validation,
isRequired
} = useField({
name,
- disabled
+ disabled,
+ customValidations
});
return /*#__PURE__*/_jsx(Controller, {
control: control,
defaultValue: false, Index: package/dist/ConnectedForm/ConnectedFormGroup.js
===================================================================
--- package/dist/ConnectedForm/ConnectedFormGroup.js
+++ package/dist/ConnectedForm/ConnectedFormGroup.js
@@ -12,9 +12,9 @@
target: "e1mlej80",
label: "ErrorAnchor"
})(css({
color: 'feedback-error'
-}), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Db25uZWN0ZWRGb3JtL0Nvbm5lY3RlZEZvcm1Hcm91cC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYW9CIiwiZmlsZSI6Ii4uLy4uL3NyYy9Db25uZWN0ZWRGb3JtL0Nvbm5lY3RlZEZvcm1Hcm91cC50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjc3MgfSBmcm9tICdAY29kZWNhZGVteS9nYW11dC1zdHlsZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBGb3JtRXJyb3IsIEZvcm1Hcm91cCwgRm9ybUdyb3VwTGFiZWwsIEZvcm1Hcm91cFByb3BzIH0gZnJvbSAnLi4nO1xuaW1wb3J0IHsgQW5jaG9yIH0gZnJvbSAnLi4vQW5jaG9yJztcbmltcG9ydCB7IE1hcmtkb3duIH0gZnJvbSAnLi4vTWFya2Rvd24nO1xuaW1wb3J0IHsgSW5mb1RpcFN1YkNvbXBvbmVudFByb3BzIH0gZnJvbSAnLi4vVGlwL0luZm9UaXAvdHlwZS11dGlscyc7XG5pbXBvcnQgeyBUZXh0IH0gZnJvbSAnLi4vVHlwb2dyYXBoeSc7XG5pbXBvcnQgeyBDb25uZWN0ZWRGaWVsZCwgRmllbGRQcm9wcywgU3VibWl0Q29udGV4dFByb3BzIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2UsIHVzZUZpZWxkIH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IEVycm9yQW5jaG9yID0gc3R5bGVkKEFuY2hvcikoXG4gIGNzcyh7XG4gICAgY29sb3I6ICdmZWVkYmFjay1lcnJvcicsXG4gIH0pXG4pO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RlZEZvcm1Hcm91cEJhc2VQcm9wc1xuICBleHRlbmRzIE9taXQ8XG4gICAgRm9ybUdyb3VwUHJvcHMsXG4gICAgJ2xhYmVsJyB8ICdkaXNhYmxlZCcgfCAnZGVzY3JpcHRpb24nIHwgJ2h0bWxGb3InXG4gID4ge1xuICBjdXN0b21FcnJvcj86IHN0cmluZztcbiAgZXJyb3JUeXBlPzogJ2luaXRpYWwnIHwgJ2Fic29sdXRlJztcbiAgaGlkZUxhYmVsPzogYm9vbGVhbjtcbiAgbmFtZTogc3RyaW5nO1xuICBsYWJlbDogUmVhY3QuUmVhY3ROb2RlO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbmZvVGlwIHRvIGRpc3BsYXkgbmV4dCB0byB0aGUgZmllbGQgbGFiZWwuIFRoZSBJbmZvVGlwIGJ1dHRvbiBpc1xuICAgKiBhdXRvbWF0aWNhbGx5IGxhYmVsbGVkIGJ5IHRoZSBmaWVsZCBsYWJlbC4gVG8gb3ZlcnJpZGUgdGhpcyBiZWhhdmlvcixcbiAgICogcHJvdmlkZSBgYXJpYUxhYmVsYCBvciBgYXJpYUxhYmVsbGVkYnlgLlxuICAgKi9cbiAgaW5mb3RpcD86IEluZm9UaXBTdWJDb21wb25lbnRQcm9wcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0ZWRGb3JtR3JvdXBQcm9wczxUIGV4dGVuZHMgQ29ubmVjdGVkRmllbGQ+XG4gIGV4dGVuZHMgU3VibWl0Q29udGV4dFByb3BzLFxuICAgIENvbm5lY3RlZEZvcm1Hcm91cEJhc2VQcm9wcyB7XG4gIC8qKlxuICAgKiBBbiBvYmplY3QgY29uc2lzdGluZyBvZiBhIGBjb21wb25lbnRgIGtleSB0byBzcGVjaWZ5IHdoYXQgQ29ubmVjdGVkRm9ybUlucHV0IHRvIHJlbmRlciAtIHRoZSByZW1haW5pbmcga2V5L3ZhbHVlIHBhaXJzIGFyZSB0aGF0IGNvbXBvbmVudHMgZGVzaXJlZCBwcm9wcy5cbiAgICovXG4gIGZpZWxkOiBPbWl0PFJlYWN0LkNvbXBvbmVudFByb3BzPFQ+LCAnbmFtZScgfCAnZGlzYWJsZWQnPiAmIEZpZWxkUHJvcHM8VD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb25uZWN0ZWRGb3JtR3JvdXA8VCBleHRlbmRzIENvbm5lY3RlZEZpZWxkPih7XG4gIGN1c3RvbUVycm9yLFxuICBjaGlsZHJlbixcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgZXJyb3JUeXBlID0gJ2Fic29sdXRlJyxcbiAgZmllbGQsXG4gIGhpZGVMYWJlbCxcbiAgaWQsXG4gIGxhYmVsLFxuICBuYW1lLFxuICBsYWJlbFNpemUsXG4gIHNwYWNpbmcgPSAnZml0JyxcbiAgaXNTb2xvRmllbGQsXG4gIGluZm90aXAsXG59OiBDb25uZWN0ZWRGb3JtR3JvdXBQcm9wczxUPikge1xuICBjb25zdCB7IGVycm9yLCBpc0ZpcnN0RXJyb3IsIGlzRGlzYWJsZWQsIHNldEVycm9yLCB2YWxpZGF0aW9uIH0gPSB1c2VGaWVsZCh7XG4gICAgbmFtZSxcbiAgICBkaXNhYmxlZCxcbiAgfSk7XG4gIGNvbnN0IHsgY29tcG9uZW50OiBDb21wb25lbnQsIC4uLnJlc3QgfSA9IGZpZWxkO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGN1c3RvbUVycm9yKSB7XG4gICAgICBzZXRFcnJvcihuYW1lLCB7XG4gICAgICAgIHR5cGU6ICdtYW51YWwnLFxuICAgICAgICBtZXNzYWdlOiBjdXN0b21FcnJvcixcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2N1c3RvbUVycm9yLCBuYW1lLCBzZXRFcnJvcl0pO1xuXG4gIGNvbnN0IHJlbmRlcmVkTGFiZWwgPSAoXG4gICAgPEZvcm1Hcm91cExhYmVsXG4gICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgIGh0bWxGb3I9e2lkIHx8IG5hbWV9XG4gICAgICBpbmZvdGlwPXtpbmZvdGlwfVxuICAgICAgaXNTb2xvRmllbGQ9e2lzU29sb0ZpZWxkfVxuICAgICAgcmVxdWlyZWQ9eyEhdmFsaWRhdGlvbj8ucmVxdWlyZWR9XG4gICAgICBzaXplPXtsYWJlbFNpemV9XG4gICAgPlxuICAgICAge2xhYmVsfVxuICAgIDwvRm9ybUdyb3VwTGFiZWw+XG4gICk7XG5cbiAgY29uc3QgdGV4dEVycm9yID0gY3VzdG9tRXJyb3IgfHwgZ2V0RXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgY29uc3Qgc2hvd0Vycm9yID0gISEodGV4dEVycm9yICYmICFoaWRlTGFiZWwpO1xuICBjb25zdCBlcnJvcklkID0gc2hvd0Vycm9yID8gYCR7aWQgfHwgbmFtZX1fZXJyb3JgIDogdW5kZWZpbmVkO1xuXG4gIHJldHVybiAoXG4gICAgPEZvcm1Hcm91cCBzcGFjaW5nPXtoaWRlTGFiZWwgPyAndGlnaHQnIDogc3BhY2luZ30+XG4gICAgICB7aGlkZUxhYmVsID8gPFRleHQgc2NyZWVucmVhZGVyPntyZW5kZXJlZExhYmVsfTwvVGV4dD4gOiByZW5kZXJlZExhYmVsfVxuICAgICAgPENvbXBvbmVudFxuICAgICAgICB7Li4uKHJlc3QgYXMgYW55KX1cbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT17ZXJyb3JJZH1cbiAgICAgICAgYXJpYS1pbnZhbGlkPXtzaG93RXJyb3J9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgbmFtZT17bmFtZX1cbiAgICAgIC8+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgICB7c2hvd0Vycm9yICYmIChcbiAgICAgICAgPEZvcm1FcnJvclxuICAgICAgICAgIGFyaWEtbGl2ZT17aXNGaXJzdEVycm9yID8gJ2Fzc2VydGl2ZScgOiAnb2ZmJ31cbiAgICAgICAgICBpZD17ZXJyb3JJZH1cbiAgICAgICAgICByb2xlPXtpc0ZpcnN0RXJyb3IgPyAnYWxlcnQnIDogJ3N0YXR1cyd9XG4gICAgICAgICAgdmFyaWFudD17ZXJyb3JUeXBlfVxuICAgICAgICA+XG4gICAgICAgICAgPE1hcmtkb3duXG4gICAgICAgICAgICBpbmxpbmVcbiAgICAgICAgICAgIG92ZXJyaWRlcz17e1xuICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgYWxsb3dlZEF0dHJpYnV0ZXM6IFsnaHJlZicsICd0YXJnZXQnXSxcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IEVycm9yQW5jaG9yLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NOb2RlOiAoXG4gICAgICAgICAgICAgICAgICBub2RlOiB1bmtub3duLFxuICAgICAgICAgICAgICAgICAgcHJvcHM6IHsgb25DbGljaz86ICgpID0+IHZvaWQgfVxuICAgICAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgeyBrZXk6IGVsZW1lbnRLZXksIC4uLnJlc3QgfSA9XG4gICAgICAgICAgICAgICAgICAgIHByb3BzIGFzIFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBFcnJvckFuY2hvcj4gJiB7XG4gICAgICAgICAgICAgICAgICAgICAga2V5PzogUmVhY3QuS2V5O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIDxFcnJvckFuY2hvciBrZXk9e2VsZW1lbnRLZXl9IHsuLi5yZXN0fSAvPjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHNraXBEZWZhdWx0T3ZlcnJpZGVzPXt7IGE6IHRydWUgfX1cbiAgICAgICAgICAgIHNwYWNpbmc9XCJub25lXCJcbiAgICAgICAgICAgIHRleHQ9e3RleHRFcnJvcn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L0Zvcm1FcnJvcj5cbiAgICAgICl9XG4gICAgPC9Gb3JtR3JvdXA+XG4gICk7XG59XG4iXX0= */");
+}), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Db25uZWN0ZWRGb3JtL0Nvbm5lY3RlZEZvcm1Hcm91cC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBY29CIiwiZmlsZSI6Ii4uLy4uL3NyYy9Db25uZWN0ZWRGb3JtL0Nvbm5lY3RlZEZvcm1Hcm91cC50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjc3MgfSBmcm9tICdAY29kZWNhZGVteS9nYW11dC1zdHlsZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUmVnaXN0ZXJPcHRpb25zIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcblxuaW1wb3J0IHsgRm9ybUVycm9yLCBGb3JtR3JvdXAsIEZvcm1Hcm91cExhYmVsLCBGb3JtR3JvdXBQcm9wcyB9IGZyb20gJy4uJztcbmltcG9ydCB7IEFuY2hvciB9IGZyb20gJy4uL0FuY2hvcic7XG5pbXBvcnQgeyBNYXJrZG93biB9IGZyb20gJy4uL01hcmtkb3duJztcbmltcG9ydCB7IEluZm9UaXBTdWJDb21wb25lbnRQcm9wcyB9IGZyb20gJy4uL1RpcC9JbmZvVGlwL3R5cGUtdXRpbHMnO1xuaW1wb3J0IHsgVGV4dCB9IGZyb20gJy4uL1R5cG9ncmFwaHknO1xuaW1wb3J0IHsgQ29ubmVjdGVkRmllbGQsIEZpZWxkUHJvcHMsIFN1Ym1pdENvbnRleHRQcm9wcyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlLCB1c2VGaWVsZCB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBFcnJvckFuY2hvciA9IHN0eWxlZChBbmNob3IpKFxuICBjc3Moe1xuICAgIGNvbG9yOiAnZmVlZGJhY2stZXJyb3InLFxuICB9KVxuKTtcblxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0ZWRGb3JtR3JvdXBCYXNlUHJvcHNcbiAgZXh0ZW5kcyBPbWl0PFxuICAgIEZvcm1Hcm91cFByb3BzLFxuICAgICdsYWJlbCcgfCAnZGlzYWJsZWQnIHwgJ2Rlc2NyaXB0aW9uJyB8ICdodG1sRm9yJ1xuICA+IHtcbiAgY3VzdG9tRXJyb3I/OiBzdHJpbmc7XG4gIGVycm9yVHlwZT86ICdpbml0aWFsJyB8ICdhYnNvbHV0ZSc7XG4gIGhpZGVMYWJlbD86IGJvb2xlYW47XG4gIG5hbWU6IHN0cmluZztcbiAgbGFiZWw6IFJlYWN0LlJlYWN0Tm9kZTtcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogSW5mb1RpcCB0byBkaXNwbGF5IG5leHQgdG8gdGhlIGZpZWxkIGxhYmVsLiBUaGUgSW5mb1RpcCBidXR0b24gaXNcbiAgICogYXV0b21hdGljYWxseSBsYWJlbGxlZCBieSB0aGUgZmllbGQgbGFiZWwuIFRvIG92ZXJyaWRlIHRoaXMgYmVoYXZpb3IsXG4gICAqIHByb3ZpZGUgYGFyaWFMYWJlbGAgb3IgYGFyaWFMYWJlbGxlZGJ5YC5cbiAgICovXG4gIGluZm90aXA/OiBJbmZvVGlwU3ViQ29tcG9uZW50UHJvcHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdGVkRm9ybUdyb3VwUHJvcHM8VCBleHRlbmRzIENvbm5lY3RlZEZpZWxkPlxuICBleHRlbmRzIFN1Ym1pdENvbnRleHRQcm9wcyxcbiAgICBDb25uZWN0ZWRGb3JtR3JvdXBCYXNlUHJvcHMge1xuICAvKipcbiAgICogQW4gb2JqZWN0IGNvbnNpc3Rpbmcgb2YgYSBgY29tcG9uZW50YCBrZXkgdG8gc3BlY2lmeSB3aGF0IENvbm5lY3RlZEZvcm1JbnB1dCB0byByZW5kZXIgLSB0aGUgcmVtYWluaW5nIGtleS92YWx1ZSBwYWlycyBhcmUgdGhhdCBjb21wb25lbnRzIGRlc2lyZWQgcHJvcHMuXG4gICAqL1xuICBmaWVsZDogT21pdDxSZWFjdC5Db21wb25lbnRQcm9wczxUPiwgJ25hbWUnIHwgJ2Rpc2FibGVkJz4gJlxuICAgIEZpZWxkUHJvcHM8VD4gJiB7XG4gICAgICBjdXN0b21WYWxpZGF0aW9ucz86IFJlZ2lzdGVyT3B0aW9ucztcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ29ubmVjdGVkRm9ybUdyb3VwPFQgZXh0ZW5kcyBDb25uZWN0ZWRGaWVsZD4oe1xuICBjdXN0b21FcnJvcixcbiAgY2hpbGRyZW4sXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIGVycm9yVHlwZSA9ICdhYnNvbHV0ZScsXG4gIGZpZWxkLFxuICBoaWRlTGFiZWwsXG4gIGlkLFxuICBsYWJlbCxcbiAgbmFtZSxcbiAgbGFiZWxTaXplLFxuICBzcGFjaW5nID0gJ2ZpdCcsXG4gIGlzU29sb0ZpZWxkLFxuICBpbmZvdGlwLFxufTogQ29ubmVjdGVkRm9ybUdyb3VwUHJvcHM8VD4pIHtcbiAgY29uc3QgeyBjb21wb25lbnQ6IENvbXBvbmVudCwgY3VzdG9tVmFsaWRhdGlvbnMsIC4uLnJlc3QgfSA9IGZpZWxkO1xuICBjb25zdCB7IGVycm9yLCBpc0ZpcnN0RXJyb3IsIGlzRGlzYWJsZWQsIHNldEVycm9yLCB2YWxpZGF0aW9uIH0gPSB1c2VGaWVsZCh7XG4gICAgbmFtZSxcbiAgICBkaXNhYmxlZCxcbiAgICBjdXN0b21WYWxpZGF0aW9ucyxcbiAgfSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY3VzdG9tRXJyb3IpIHtcbiAgICAgIHNldEVycm9yKG5hbWUsIHtcbiAgICAgICAgdHlwZTogJ21hbnVhbCcsXG4gICAgICAgIG1lc3NhZ2U6IGN1c3RvbUVycm9yLFxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbY3VzdG9tRXJyb3IsIG5hbWUsIHNldEVycm9yXSk7XG5cbiAgY29uc3QgcmVuZGVyZWRMYWJlbCA9IChcbiAgICA8Rm9ybUdyb3VwTGFiZWxcbiAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgaHRtbEZvcj17aWQgfHwgbmFtZX1cbiAgICAgIGluZm90aXA9e2luZm90aXB9XG4gICAgICBpc1NvbG9GaWVsZD17aXNTb2xvRmllbGR9XG4gICAgICByZXF1aXJlZD17Qm9vbGVhbih2YWxpZGF0aW9uPy5yZXF1aXJlZCl9XG4gICAgICBzaXplPXtsYWJlbFNpemV9XG4gICAgPlxuICAgICAge2xhYmVsfVxuICAgIDwvRm9ybUdyb3VwTGFiZWw+XG4gICk7XG5cbiAgY29uc3QgdGV4dEVycm9yID0gY3VzdG9tRXJyb3IgfHwgZ2V0RXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgY29uc3Qgc2hvd0Vycm9yID0gISEodGV4dEVycm9yICYmICFoaWRlTGFiZWwpO1xuICBjb25zdCBlcnJvcklkID0gc2hvd0Vycm9yID8gYCR7aWQgfHwgbmFtZX1fZXJyb3JgIDogdW5kZWZpbmVkO1xuXG4gIHJldHVybiAoXG4gICAgPEZvcm1Hcm91cCBzcGFjaW5nPXtoaWRlTGFiZWwgPyAndGlnaHQnIDogc3BhY2luZ30+XG4gICAgICB7aGlkZUxhYmVsID8gPFRleHQgc2NyZWVucmVhZGVyPntyZW5kZXJlZExhYmVsfTwvVGV4dD4gOiByZW5kZXJlZExhYmVsfVxuICAgICAgPENvbXBvbmVudFxuICAgICAgICB7Li4uKHJlc3QgYXMgYW55KX1cbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT17ZXJyb3JJZH1cbiAgICAgICAgYXJpYS1pbnZhbGlkPXtzaG93RXJyb3J9XG4gICAgICAgIGN1c3RvbVZhbGlkYXRpb25zPXtjdXN0b21WYWxpZGF0aW9uc31cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICAgIHtzaG93RXJyb3IgJiYgKFxuICAgICAgICA8Rm9ybUVycm9yXG4gICAgICAgICAgYXJpYS1saXZlPXtpc0ZpcnN0RXJyb3IgPyAnYXNzZXJ0aXZlJyA6ICdvZmYnfVxuICAgICAgICAgIGlkPXtlcnJvcklkfVxuICAgICAgICAgIHJvbGU9e2lzRmlyc3RFcnJvciA/ICdhbGVydCcgOiAnc3RhdHVzJ31cbiAgICAgICAgICB2YXJpYW50PXtlcnJvclR5cGV9XG4gICAgICAgID5cbiAgICAgICAgICA8TWFya2Rvd25cbiAgICAgICAgICAgIGlubGluZVxuICAgICAgICAgICAgb3ZlcnJpZGVzPXt7XG4gICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICBhbGxvd2VkQXR0cmlidXRlczogWydocmVmJywgJ3RhcmdldCddLFxuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogRXJyb3JBbmNob3IsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc05vZGU6IChcbiAgICAgICAgICAgICAgICAgIG5vZGU6IHVua25vd24sXG4gICAgICAgICAgICAgICAgICBwcm9wczogeyBvbkNsaWNrPzogKCkgPT4gdm9pZCB9XG4gICAgICAgICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB7IGtleTogZWxlbWVudEtleSwgLi4ucmVzdCB9ID1cbiAgICAgICAgICAgICAgICAgICAgcHJvcHMgYXMgUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIEVycm9yQW5jaG9yPiAmIHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXk/OiBSZWFjdC5LZXk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICByZXR1cm4gPEVycm9yQW5jaG9yIGtleT17ZWxlbWVudEtleX0gey4uLnJlc3R9IC8+O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgc2tpcERlZmF1bHRPdmVycmlkZXM9e3sgYTogdHJ1ZSB9fVxuICAgICAgICAgICAgc3BhY2luZz1cIm5vbmVcIlxuICAgICAgICAgICAgdGV4dD17dGV4dEVycm9yfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvRm9ybUVycm9yPlxuICAgICAgKX1cbiAgICA8L0Zvcm1Hcm91cD5cbiAgKTtcbn1cbiJdfQ== */");
export function ConnectedFormGroup({
customError,
children,
disabled = false,
@@ -29,21 +29,23 @@
isSoloField,
infotip
}) {
const {
+ component: Component,
+ customValidations,
+ ...rest
+ } = field;
+ const {
error,
isFirstError,
isDisabled,
setError,
validation
} = useField({
name,
- disabled
+ disabled,
+ customValidations
});
- const {
- component: Component,
- ...rest
- } = field;
useEffect(() => {
if (customError) {
setError(name, {
type: 'manual',
@@ -55,9 +57,9 @@
disabled: isDisabled,
htmlFor: id || name,
infotip: infotip,
isSoloField: isSoloField,
- required: !!validation?.required,
+ required: Boolean(validation?.required),
size: labelSize,
children: label
});
const textError = customError || getErrorMessage(error);
@@ -71,8 +73,9 @@
}) : renderedLabel, /*#__PURE__*/_jsx(Component, {
...rest,
"aria-describedby": errorId,
"aria-invalid": showError,
+ customValidations: customValidations,
disabled: disabled,
name: name
}), children, showError && /*#__PURE__*/_jsx(FormError, {
"aria-live": isFirstError ? 'assertive' : 'off', Index: package/dist/ConnectedForm/ConnectedInputs/ConnectedInput.js
===================================================================
--- package/dist/ConnectedForm/ConnectedInputs/ConnectedInput.js
+++ package/dist/ConnectedForm/ConnectedInputs/ConnectedInput.js
@@ -4,8 +4,9 @@
import { jsx as _jsx } from "react/jsx-runtime";
export const ConnectedInput = ({
disabled,
name,
+ customValidations,
...rest
}) => {
const {
error,
@@ -13,9 +14,10 @@
ref,
isRequired
} = useField({
name,
- disabled
+ disabled,
+ customValidations
});
return /*#__PURE__*/_jsx(Input, {
"aria-required": isRequired,
disabled: isDisabled, Index: package/dist/ConnectedForm/ConnectedInputs/ConnectedRadio.js
===================================================================
--- package/dist/ConnectedForm/ConnectedInputs/ConnectedRadio.js
+++ package/dist/ConnectedForm/ConnectedInputs/ConnectedRadio.js
@@ -4,17 +4,19 @@
import { jsx as _jsx } from "react/jsx-runtime";
export const ConnectedRadio = ({
disabled,
name,
+ customValidations,
...rest
}) => {
const {
error,
isDisabled,
ref
} = useField({
name,
- disabled
+ disabled,
+ customValidations
});
return /*#__PURE__*/_jsx(Radio, {
disabled: isDisabled,
error: Boolean(error), Index: package/dist/ConnectedForm/ConnectedInputs/ConnectedRadioGroup.js
===================================================================
--- package/dist/ConnectedForm/ConnectedInputs/ConnectedRadioGroup.js
+++ package/dist/ConnectedForm/ConnectedInputs/ConnectedRadioGroup.js
@@ -4,15 +4,17 @@
import { jsx as _jsx } from "react/jsx-runtime";
export const ConnectedRadioGroup = ({
name,
onChange,
+ customValidations,
...rest
}) => {
const {
setValue,
isRequired
} = useField({
- name
+ name,
+ customValidations
});
return /*#__PURE__*/_jsx(RadioGroup, {
"aria-required": isRequired,
htmlForPrefix: name, Index: package/dist/ConnectedForm/ConnectedInputs/ConnectedRadioGroupInput.js
===================================================================
--- package/dist/ConnectedForm/ConnectedInputs/ConnectedRadioGroupInput.js
+++ package/dist/ConnectedForm/ConnectedInputs/ConnectedRadioGroupInput.js
@@ -4,11 +4,13 @@
export const ConnectedRadioGroupInput = ({
name,
options,
disabled,
+ customValidations,
...rest
}) => {
return /*#__PURE__*/_jsx(ConnectedRadioGroup, {
+ customValidations: customValidations,
name: name,
...rest,
children: options.map(elem => {
return /*#__PURE__*/_jsx(ConnectedRadio, { Index: package/dist/ConnectedForm/ConnectedInputs/ConnectedSelect.js
===================================================================
--- package/dist/ConnectedForm/ConnectedInputs/ConnectedSelect.js
+++ package/dist/ConnectedForm/ConnectedInputs/ConnectedSelect.js
@@ -4,8 +4,9 @@
import { jsx as _jsx } from "react/jsx-runtime";
export const ConnectedSelect = ({
disabled,
name,
+ customValidations,
...rest
}) => {
const {
error,
@@ -13,9 +14,10 @@
ref,
isRequired
} = useField({
name,
- disabled
+ disabled,
+ customValidations
});
return /*#__PURE__*/_jsx(Select, {
"aria-required": isRequired,
disabled: isDisabled, Index: package/dist/ConnectedForm/ConnectedInputs/ConnectedTextArea.js
===================================================================
--- package/dist/ConnectedForm/ConnectedInputs/ConnectedTextArea.js
+++ package/dist/ConnectedForm/ConnectedInputs/ConnectedTextArea.js
@@ -4,8 +4,9 @@
import { jsx as _jsx } from "react/jsx-runtime";
export const ConnectedTextArea = ({
disabled,
name,
+ customValidations,
...rest
}) => {
const {
error,
@@ -13,9 +14,10 @@
ref,
isRequired
} = useField({
name,
- disabled
+ disabled,
+ customValidations
});
return /*#__PURE__*/_jsx(TextArea, {
"aria-required": isRequired,
disabled: isDisabled, Index: package/dist/ConnectedForm/ConnectedInputs/ConnectedNestedCheckboxes/index.js
===================================================================
--- package/dist/ConnectedForm/ConnectedInputs/ConnectedNestedCheckboxes/index.js
+++ package/dist/ConnectedForm/ConnectedInputs/ConnectedNestedCheckboxes/index.js
@@ -9,9 +9,10 @@
name,
options,
disabled,
onUpdate,
- spacing
+ spacing,
+ customValidations
}) => {
const {
isDisabled,
control,
@@ -20,9 +21,10 @@
getValues,
setValue
} = useField({
name,
- disabled
+ disabled,
+ customValidations
});
const defaultValue = getValues()[name];
const flatOptions = useMemo(() => flattenOptions(options), [options]);
const [hasExpandedInitially, setHasExpandedInitially] = useState(false); Index: package/dist/ConnectedForm/utils.js
===================================================================
--- package/dist/ConnectedForm/utils.js
+++ package/dist/ConnectedForm/utils.js
@@ -75,9 +75,10 @@
};
export const useField = ({
name,
disabled,
- loading
+ loading,
+ customValidations
}) => {
// This is fixed in a later react-hook-form version:
// https://github.com/react-hook-form/react-hook-form/issues/2887
// eslint-disable-next-line @typescript-eslint/unbound-method
@@ -100,9 +101,13 @@
} = useSubmitState({
disabled: disabled || formStateDisabled,
loading
});
- const validation = (validationRules && validationRules[name]) ?? undefined;
+ const formValidation = (validationRules && validationRules[name]) ?? undefined;
+ const validation = formValidation || customValidations ? {
+ ...formValidation,
+ ...customValidations
+ } : undefined;
const ref = register(name, validation);
return {
control,
error,
@@ -231,14 +236,16 @@
watchUpdateKeyName,
disabled,
loading,
type,
- shouldDirtyOnChange
+ shouldDirtyOnChange,
+ customValidations
}) {
const useFieldPayload = useField({
name,
disabled,
- loading
+ loading,
+ customValidations
});
const defaultValue = type === 'checkbox' ? false : '';
// START - Specific to useDebouncedField - START Index: package/package.json
===================================================================
--- package/package.json
+++ package/package.json
@@ -1,16 +1,16 @@
{
"name": "@codecademy/gamut",
"description": "Styleguide & Component library for Codecademy",
- "version": "71.0.0",
+ "version": "71.0.1-alpha.c9e50f.0",
"author": "Codecademy Engineering <[email protected]>",
"bin": "./bin/gamut.mjs",
"dependencies": {
- "@codecademy/gamut-icons": "9.57.7",
- "@codecademy/gamut-illustrations": "0.58.13",
- "@codecademy/gamut-patterns": "0.10.32",
- "@codecademy/gamut-styles": "20.0.0",
- "@codecademy/variance": "0.26.1",
+ "@codecademy/gamut-icons": "9.57.8-alpha.c9e50f.0",
+ "@codecademy/gamut-illustrations": "0.58.14-alpha.c9e50f.0",
+ "@codecademy/gamut-patterns": "0.10.33-alpha.c9e50f.0",
+ "@codecademy/gamut-styles": "20.0.1-alpha.c9e50f.0",
+ "@codecademy/variance": "0.26.2-alpha.c9e50f.0",
"@formatjs/intl-locale": "5.3.1",
"@react-aria/interactions": "3.25.0",
"@types/marked": "^4.0.8",
"@vidstack/react": "^1.12.12", Index: package/dist/ConnectedForm/ConnectedFormGroup.d.ts
===================================================================
--- package/dist/ConnectedForm/ConnectedFormGroup.d.ts
+++ package/dist/ConnectedForm/ConnectedFormGroup.d.ts
@@ -1,5 +1,6 @@
import * as React from 'react';
+import { RegisterOptions } from 'react-hook-form';
import { FormGroupProps } from '..';
import { InfoTipSubComponentProps } from '../Tip/InfoTip/type-utils';
import { ConnectedField, FieldProps, SubmitContextProps } from './types';
export interface ConnectedFormGroupBaseProps extends Omit<FormGroupProps, 'label' | 'disabled' | 'description' | 'htmlFor'> {
@@ -19,7 +20,9 @@
export interface ConnectedFormGroupProps<T extends ConnectedField> extends SubmitContextProps, ConnectedFormGroupBaseProps {
/**
* An object consisting of a `component` key to specify what ConnectedFormInput to render - the remaining key/value pairs are that components desired props.
*/
- field: Omit<React.ComponentProps<T>, 'name' | 'disabled'> & FieldProps<T>;
+ field: Omit<React.ComponentProps<T>, 'name' | 'disabled'> & FieldProps<T> & {
+ customValidations?: RegisterOptions;
+ };
}
export declare function ConnectedFormGroup<T extends ConnectedField>({ customError, children, disabled, errorType, field, hideLabel, id, label, name, labelSize, spacing, isSoloField, infotip, }: ConnectedFormGroupProps<T>): import("react/jsx-runtime").JSX.Element; Index: package/dist/ConnectedForm/ConnectedInputs/types.d.ts
===================================================================
--- package/dist/ConnectedForm/ConnectedInputs/types.d.ts
+++ package/dist/ConnectedForm/ConnectedInputs/types.d.ts
@@ -1,11 +1,13 @@
import { ReactNode } from 'react';
+import { RegisterOptions } from 'react-hook-form';
import { CheckboxLabelUnion, CheckboxProps, InputWrapperProps, RadioGroupProps, RadioProps, SelectProps, TextAreaProps } from '../../Form';
export interface BaseConnectedFieldProps {
onUpdate?: (value: boolean) => void;
}
export interface ConnectedFieldProps extends BaseConnectedFieldProps {
name: string;
+ customValidations?: RegisterOptions;
}
export interface MinimalCheckboxProps extends Omit<CheckboxProps, 'defaultValue' | 'name' | 'htmlFor' | 'validation' | 'label' | 'aria-label'> {
}
export interface BaseConnectedCheckboxProps extends MinimalCheckboxProps, ConnectedFieldProps {
@@ -33,9 +35,9 @@
}
export type NestedConnectedCheckboxOption = Omit<MinimalCheckboxProps, 'spacing'> & CheckboxLabelUnion & {
options?: NestedConnectedCheckboxOption[];
};
-export interface ConnectedNestedCheckboxesProps extends Pick<BaseConnectedCheckboxProps, 'name' | 'disabled' | 'spacing'> {
+export interface ConnectedNestedCheckboxesProps extends Pick<BaseConnectedCheckboxProps, 'name' | 'disabled' | 'spacing' | 'customValidations'> {
options: NestedConnectedCheckboxOption[];
onUpdate?: (values: string[]) => void;
}
export {}; Index: package/dist/ConnectedForm/utils.d.ts
===================================================================
--- package/dist/ConnectedForm/utils.d.ts
+++ package/dist/ConnectedForm/utils.d.ts
@@ -63,10 +63,11 @@
watch: import("react-hook-form").UseFormWatch<import("react-hook-form").FieldValues>;
};
interface useFieldProps extends SubmitContextProps {
name: string;
+ customValidations?: RegisterOptions;
}
-export declare const useField: ({ name, disabled, loading }: useFieldProps) => {
+export declare const useField: ({ name, disabled, loading, customValidations, }: useFieldProps) => {
control: import("react-hook-form").Control<import("react-hook-form").FieldValues, any, import("react-hook-form").FieldValues>;
error: string | FieldError | Merge<FieldError, FieldErrorsImpl<any>> | undefined;
getValues: import("react-hook-form").UseFormGetValues<import("react-hook-form").FieldValues>;
isDisabled: boolean;
@@ -111,13 +112,13 @@
* for something that I think could be modified to make this better
* but I couldn't get it to work
*/
type InputTypes = Extract<HTMLInputTypeAttribute, 'number' | 'color' | 'date' | 'datetime-local' | 'time' | 'image' | 'checkbox' | 'text' | 'hidden' | 'password' | 'radio' | 'range' | 'email' | 'search' | 'month' | 'tel' | 'time' | 'url' | 'week'> | 'textarea' | 'select';
-type DebouncedFieldProps<T extends InputTypes> = Omit<GetInitialFormValueProps, 'setLocalValue' | 'defaultValue'> & Pick<useFieldProps, 'loading' | 'disabled' | 'name'> & {
+type DebouncedFieldProps<T extends InputTypes> = Omit<GetInitialFormValueProps, 'setLocalValue' | 'defaultValue'> & Pick<useFieldProps, 'loading' | 'disabled' | 'name' | 'customValidations'> & {
type: T;
shouldDirtyOnChange?: boolean;
};
-export declare function useDebouncedField<T extends InputTypes>({ name, watchUpdateKeyName, disabled, loading, type, shouldDirtyOnChange, }: DebouncedFieldProps<T>): {
+export declare function useDebouncedField<T extends InputTypes>({ name, watchUpdateKeyName, disabled, loading, type, shouldDirtyOnChange, customValidations, }: DebouncedFieldProps<T>): {
onBlur: () => void;
onChange: ChangeEventHandler<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>;
value: T extends "checkbox" ? boolean : string;
error: string | FieldError | Merge<FieldError, FieldErrorsImpl<any>> | undefined;