@square/maker
Version:
📚 Maker Design System by Square
1 lines • 4.91 kB
Source Map (JSON)
{"version":3,"sources":["webpack://../components/Textarea/src/TextareaControl.vue"],"names":[],"mappings":"AAmGA,mBACA,mCAAA,CACA,6CAAA,CACA,kCAAA,CACA,oCAAA,CACA,gCAAA,CACA,4CAAA,CACA,0BAAA,CACA,0BAAA,CACA,mBAAA,CACA,qBAAA,CACA,2CACA,CAEA,mBACA,uBAAA,CACA,6BAAA,CACA,kCAAA,CACA,oCAAA,CACA,gCAAA,CACA,4CAAA,CACA,+BAAA,CACA,qCAAA,CACA,mBAAA,CACA,qBAAA,CACA,mBACA,CAEA,mBACA,qBAAA,CACA,UAAA,CAGA,eAAA,CACA,iBAAA,CACA,6BAAA,CACA,cAAA,CACA,mBAAA,CACA,8BAAA,CACA,gBAAA,CACA,wCAAA,CACA,oCAAA,CACA,kCAAA,CACA,YAAA,CACA,mEAGA,CACA,WAuCA,CArCA,gCACA,8BACA,CAEA,4BACA,2BAAA,CACA,iDAAA,CACA,kBAKA,CAHA,yCACA,2BACA,CAGA,2BACA,+BACA,CAEA,sDACA,uCACA,CAEA,6GAEA,8CAAA,CACA,uCAAA,CACA,8BACA,CAEA,iFAEA,8CACA,CAEA,qCACA,eACA","file":"styles.css","sourcesContent":["<template>\n\t<textarea\n\t\tref=\"textarea\"\n\t\tv-model=\"textareaVal\"\n\t\t:class=\"[\n\t\t\t$s.Textarea,\n\t\t\t$s[`variant_${variant}`],\n\t\t\t{\n\t\t\t\t[$s.resizable]: resizable,\n\t\t\t},\n\t\t]\"\n\t\tv-bind=\"$attrs\"\n\t\tv-on=\"$listeners\"\n\t/>\n</template>\n\n<script>\n/**\n * Textarea Control\n * @inheritAttrs textarea\n * @inheritListeners textarea\n */\nexport default {\n\tmodel: {\n\t\tprop: 'value',\n\t\tevent: 'textarea:update',\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * textarea variant\n\t\t */\n\t\tvariant: {\n\t\t\ttype: String,\n\t\t\tdefault: 'fill',\n\t\t\tvalidator: (variant) => ['fill', 'outline'].includes(variant),\n\t\t},\n\t\t/**\n\t\t * textarea's current value\n\t\t */\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\t/**\n\t\t * Toggle textarea's invalid state\n\t\t */\n\t\tinvalid: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\t/**\n\t\t * Toggles whether textarea is resizable\n\t\t */\n\t\tresizable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\ttextareaVal: {\n\t\t\tget() {\n\t\t\t\treturn this.value;\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\t/**\n\t\t\t\t * updated textarea value\n\t\t\t\t * @property {string}\n\t\t\t\t */\n\t\t\t\tthis.$emit('textarea:update', value);\n\t\t\t},\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.setCustomValidity();\n\t},\n\n\tupdated() {\n\t\tthis.setCustomValidity();\n\t},\n\n\tmethods: {\n\t\tsetCustomValidity() {\n\t\t\tconst customValidity = this.invalid ? 'invalid' : '';\n\t\t\t// sets element's internal :invalid flag\n\t\t\tthis.$refs.textarea.setCustomValidity(customValidity);\n\t\t},\n\t},\n};\n</script>\n\n<style module=\"$s\">\n/*\n\tMost (if not all) of these should be provided\n\tby the Theme Context, but this is a placeholder\n\tuntil we get a Theme Context component\n*/\n.variant_fill {\n\t--color-background: rgba(0, 0, 0, 0.05);\n\t--color-background-focus: rgba(255, 255, 255, 0.95);\n\t--color-foreground: rgba(0, 0, 0, 0.9);\n\t--color-placeholder: rgba(0, 0, 0, 0.55);\n\t--color-disabled: rgba(0, 0, 0, 0.3);\n\t--color-background-disabled: rgba(0, 0, 0, 0.05);\n\t--color-border: transparent;\n\t--color-border-active: #222;\n\t--border-radius: 8px;\n\t--color-error: rgba(206, 50, 23, 1);\n\t--focus-shadow: 0 0 0 2px rgba(34, 34, 34, 0.3);\n}\n\n.variant_outline {\n\t--color-background: #fff;\n\t--color-background-focus: #fff;\n\t--color-foreground: rgba(0, 0, 0, 0.9);\n\t--color-placeholder: rgba(0, 0, 0, 0.55);\n\t--color-disabled: rgba(0, 0, 0, 0.3);\n\t--color-background-disabled: rgb(0, 0, 0, 0.03);\n\t--color-border: rgb(0, 0, 0, 0.15);\n\t--color-border-active: rgb(0, 0, 0, 0.3);\n\t--border-radius: 8px;\n\t--color-error: rgba(206, 50, 23, 1);\n\t--focus-shadow: none;\n}\n\n.Textarea {\n\tbox-sizing: border-box;\n\twidth: 100%;\n\n\t/* top & bottom padding + 3 line-heights */\n\tmin-height: calc(12px * 2 + 24px * 3);\n\tpadding: 12px 16px;\n\tcolor: var(--color-foreground);\n\tfont-size: 16px;\n\tfont-family: inherit;\n\tfont-family: var(--font-family);\n\tline-height: 24px;\n\tbackground-color: var(--color-background);\n\tborder: 1px solid var(--color-border);\n\tborder-radius: var(--border-radius);\n\toutline: none;\n\ttransition:\n\t\tborder 0.2s ease,\n\t\tbackground-color 0.2s ease,\n\t\tcolor 0.2s ease;\n\tresize: none;\n\n\t&::placeholder {\n\t\tcolor: var(--color-placeholder);\n\t}\n\n\t&:disabled {\n\t\tcolor: var(--color-disabled);\n\t\tbackground-color: var(--color-background-disabled);\n\t\tcursor: not-allowed;\n\n\t\t&::placeholder {\n\t\t\tcolor: var(--color-disabled);\n\t\t}\n\t}\n\n\t&:invalid {\n\t\tborder-color: var(--color-error);\n\t}\n\n\t&:hover:not(:disabled, :invalid) {\n\t\tborder-color: var(--color-border-active);\n\t}\n\n\t&:active:not(:disabled, :invalid),\n\t&:focus:not(:disabled, :invalid) {\n\t\tbackground-color: var(--color-background-focus);\n\t\tborder-color: var(--color-border-active);\n\t\tbox-shadow: var(--focus-shadow);\n\t}\n\n\t&:active:not(:disabled),\n\t&:focus:not(:disabled) {\n\t\tbackground-color: var(--color-background-focus);\n\t}\n\n\t&.resizable {\n\t\tresize: vertical;\n\t}\n}\n</style>\n"]}