<span class="compose-box-length {{overLimit ? 'over-char-limit' : ''}}" aria-label="{{lengthLabel}}"> {{lengthToDisplayDeferred || '0'}} </span> <style> .compose-box-length { grid-area: length; justify-self: right; color: var(--main-theme-color); font-size: 1.3em; align-self: center; } .compose-box-length.over-char-limit { color: var(--warning-color); } </style> <script> import { CHAR_LIMIT } from '../../_static/statuses' import { mark, stop } from '../../_utils/marks' import { store } from '../../_store/store' import { scheduleIdleTask } from '../../_utils/scheduleIdleTask' export default { oncreate() { this.set({lengthToDisplayDeferred: this.get('lengthToDisplay')}) // perf improvement for keyboard input latency this.observe('lengthToDisplay', () => { scheduleIdleTask(() => { mark('set lengthToDisplayDeferred') this.set({lengthToDisplayDeferred: this.get('lengthToDisplay')}) stop('set lengthToDisplayDeferred') }) }, {init: false}) }, store: () => store, computed: { lengthToDisplay: (length) => CHAR_LIMIT - length, lengthLabel: (overLimit, lengthToDisplayDeferred) => { if (overLimit) { return `${lengthToDisplayDeferred} characters over limit` } else { return `${lengthToDisplayDeferred} characters remaining` } } } } </script>