--- /dev/null
+import slice from 'slice-ansi';
+import stringWidth from 'string-width';
+
+/**
+ * @param {string} input
+ * @param {number} size
+ * @returns {Array}
+ */
+export default (input, size) => {
+ let subject;
+
+ subject = input;
+
+ const chunks = [];
+
+ // https://regex101.com/r/gY5kZ1/1
+ const re = new RegExp('(^.{1,' + size + '}(\\s+|$))|(^.{1,' + (size - 1) + '}(\\\\|/|_|\\.|,|;|-))');
+
+ do {
+ let chunk;
+
+ chunk = subject.match(re);
+
+ if (chunk) {
+ chunk = chunk[0];
+
+ subject = slice(subject, stringWidth(chunk));
+
+ chunk = chunk.trim();
+ } else {
+ chunk = slice(subject, 0, size);
+ subject = slice(subject, size);
+ }
+
+ chunks.push(chunk);
+ } while (stringWidth(subject));
+
+ return chunks;
+};