{"version":3,"file":"/Users/anthonygubler/development/dojo-org/widgets/src/constrained-input/index.tsx","sourceRoot":"","sources":["index.tsx"],"names":[],"mappings":";AAAA,OAAO,SAAoE,MAAM,eAAe,CAAC;AACjG,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,UAA+B,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,MAAM,qBAAqB,CAAC;AACxC,OAAO,KAAK,mBAAmB,MAAM,0CAA0C,CAAC;AAChF,OAAO,KAAK,YAAY,MAAM,mCAAmC,CAAC;AAelE,MAAM,OAAO,GAAG,MAAM,CAAC;IACtB,MAAM,EAAE,sBAAsB,EAAyB;IACvD,UAAU;IACV,KAAK;CACL,CAAC;KACA,UAAU,EAA8B;KACxC,QAAQ,EAAiC,CAAC;AAE5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC,SAAS,gBAAgB,CAAC,EACjE,UAAU,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,EACzC,UAAU,EACV,QAAQ,EACR;IACA,MAAM,iBAA0D,EAA1D,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,OAA2B,EAAzB,iEAAyB,CAAC;IACjE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAElC,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAEpC,MAAM,gBAAgB,GAAG,CAAC,KAAe,EAAE,OAAgB,EAAE,EAAE;QAC9D,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QACxC,UAAU,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,MAAM,2BAA2B,GAChC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5E,OAAO,CACN,IAAC,SAAS,kBACT,GAAG,EAAC,MAAM,IACN,KAAK,IACT,KAAK,EAAE,KAAK,CAAC,OAAO,CACnB,YAAY,EACZ,mBAAmB,CACnB,EACD,eAAe,EAAE,SAAS,EAC1B,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,gBAAgB,EAC5B,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,2BAA2B,KAEhE,QAAQ,EAAE,CAAC,CAAC,CAAC,CACH,CACZ,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,eAAe,gBAAgB,CAAC","sourcesContent":["import TextInput, { BaseInputProperties, TextInputType, TextInputChildren } from '../text-input';\nimport { create, tsx } from '@dojo/framework/core/vdom';\nimport { createICacheMiddleware } from '@dojo/framework/core/middleware/icache';\nimport validation, { ValidationRules } from '../middleware/validation';\nimport theme from '../middleware/theme';\nimport * as constrainedInputCss from '../theme/default/constrained-input.m.css';\nimport * as textInputCss from '../theme/default/text-input.m.css';\n\nexport interface ConstrainedInputProperties extends BaseInputProperties {\n\t/** Validation rules applied to this input */\n\trules: ValidationRules;\n\t/** Callback fired when the input validation changes */\n\tonValidate?: (valid?: boolean) => void;\n\t/** Input type, text or email, tel, etc. */\n\ttype?: TextInputType;\n}\n\nexport interface ConstrainedInputState {\n\tvalid: { valid?: boolean; message?: string } | undefined;\n}\n\nconst factory = create({\n\ticache: createICacheMiddleware<ConstrainedInputState>(),\n\tvalidation,\n\ttheme\n})\n\t.properties<ConstrainedInputProperties>()\n\t.children<TextInputChildren | undefined>();\n\nexport const ConstrainedInput = factory(function ConstrainedInput({\n\tmiddleware: { icache, validation, theme },\n\tproperties,\n\tchildren\n}) {\n\tconst { rules, onValidate, helperText, ...props } = properties();\n\tconst valid = icache.get('valid');\n\n\tconst validator = validation(rules);\n\n\tconst handleValidation = (valid?: boolean, message?: string) => {\n\t\ticache.set('valid', { valid, message });\n\t\tonValidate && onValidate(valid);\n\t};\n\n\tconst generatedDescribeHelperText =\n\t\tvalid && valid.valid === true ? undefined : validator.describe().join(' ');\n\n\treturn (\n\t\t<TextInput\n\t\t\tkey=\"root\"\n\t\t\t{...props}\n\t\t\ttheme={theme.compose(\n\t\t\t\ttextInputCss,\n\t\t\t\tconstrainedInputCss\n\t\t\t)}\n\t\t\tcustomValidator={validator}\n\t\t\tvalid={valid}\n\t\t\tonValidate={handleValidation}\n\t\t\thelperText={helperText ? helperText : generatedDescribeHelperText}\n\t\t>\n\t\t\t{children()[0]}\n\t\t</TextInput>\n\t);\n});\n\nexport default ConstrainedInput;\n"]}