@tremolo-ui/functions 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +2 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -3
- package/dist/index.js.map +1 -1
- package/package.json +8 -25
- package/dist/NumberInput/type.cjs +0 -45
- package/dist/NumberInput/type.cjs.map +0 -1
- package/dist/NumberInput/type.d.cts +0 -20
- package/dist/NumberInput/type.d.cts.map +0 -1
- package/dist/NumberInput/type.d.ts +0 -20
- package/dist/NumberInput/type.d.ts.map +0 -1
- package/dist/NumberInput/type.js +0 -43
- package/dist/NumberInput/type.js.map +0 -1
- package/dist/Slider/type.cjs +0 -36
- package/dist/Slider/type.cjs.map +0 -1
- package/dist/Slider/type.d.cts +0 -15
- package/dist/Slider/type.d.cts.map +0 -1
- package/dist/Slider/type.d.ts +0 -15
- package/dist/Slider/type.d.ts.map +0 -1
- package/dist/Slider/type.js +0 -35
- package/dist/Slider/type.js.map +0 -1
- package/src/components/NumberInput/type.ts +0 -62
- package/src/components/Slider/type.ts +0 -30
package/dist/index.cjs
CHANGED
|
@@ -22,8 +22,7 @@ function normalizeValue(rawValue$1, min, max, skew = 1) {
|
|
|
22
22
|
*/
|
|
23
23
|
function rawValue(normalizedValue, min, max, skew = 1) {
|
|
24
24
|
if (min >= max) throw new RangeError("requirements: min < max");
|
|
25
|
-
|
|
26
|
-
return min + v * (max - min);
|
|
25
|
+
return min + (skew == 1 ? clamp(normalizedValue, 0, 1) : Math.exp(Math.log(clamp(normalizedValue, 0, 1)) / skew)) * (max - min);
|
|
27
26
|
}
|
|
28
27
|
/**
|
|
29
28
|
*
|
|
@@ -57,7 +56,7 @@ function toFixed(x, fractionDigits) {
|
|
|
57
56
|
* @category Math
|
|
58
57
|
*/
|
|
59
58
|
function integerPart(x) {
|
|
60
|
-
if (Number.isNaN(x)) return
|
|
59
|
+
if (Number.isNaN(x)) return;
|
|
61
60
|
return String(x).split(".")[0];
|
|
62
61
|
}
|
|
63
62
|
/**
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["value: number","min: number","max: number","rawValue: number","rawValue","normalizedValue: number","centerValue: number","step: number","x: number","fractionDigits?: number","x: number | string","degree: number","degree","radian: number","radian","inMin: number","inMax: number","outMin: number","outMax: number","db: number","gain: number","value: string | number","op?: Operator","influencer?: number","obj: object","n: number","m: number","noteName: string","noteName","noteNumber: number","noteNumber","note: number | string"],"sources":["../src/math.ts","../src/util.ts","../src/midi.ts"],"sourcesContent":["/**\n * clamp value between min and max\n * @category Math\n */\nexport function clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(value, max))\n}\n\n/**\n * Normalize the value from 0 to 1\n * @category Math\n */\nexport function normalizeValue(\n rawValue: number,\n min: number,\n max: number,\n skew = 1,\n) {\n if (min >= max) throw new RangeError('requirements: min < max')\n const v = clamp((rawValue - min) / (max - min), 0, 1)\n return Math.pow(v, skew)\n}\n\n/**\n * Convert normalized values back to raw values.\n * @category Math\n */\nexport function rawValue(\n normalizedValue: number,\n min: number,\n max: number,\n skew = 1,\n) {\n if (min >= max) throw new RangeError('requirements: min < max')\n const v =\n skew == 1\n ? clamp(normalizedValue, 0, 1)\n : Math.exp(Math.log(clamp(normalizedValue, 0, 1)) / skew)\n return min + v * (max - min)\n}\n\n/**\n *\n * @category Math\n */\nexport function skewWithCenterValue(\n centerValue: number,\n min: number,\n max: number,\n) {\n if (!(min <= centerValue && centerValue <= max))\n throw new RangeError('requirements: min <= centerValue <= max')\n return Math.log(0.5) / Math.log((centerValue - min) / (max - min))\n}\n\n/**\n *\n * @category Math\n */\nexport function stepValue(value: number, step: number) {\n if (step <= 0) throw new RangeError('requirements: step > 0')\n const quotient = Math.floor(value / step)\n const decimalDigits = decimalPart(step)?.length\n const v = toFixed(quotient * step, decimalDigits)\n const next = toFixed((quotient + 1) * step, decimalDigits)\n return Math.abs(value - v) < Math.abs(value - next) ? v : next\n}\n\n/**\n *\n * @category Math\n */\nexport function toFixed(x: number, fractionDigits?: number) {\n return Number(x.toFixed(fractionDigits))\n}\n\n/**\n *\n * @category Math\n */\nexport function integerPart(x: number | string): string | undefined {\n if (Number.isNaN(x)) {\n return undefined\n }\n return String(x).split('.')[0]\n}\n\n/**\n *\n * @category Math\n */\nexport function decimalPart(x: number | string): string | undefined {\n return String(x).split('.')[1]\n}\n\n/**\n *\n * @category Math\n */\nexport function radian(degree: number) {\n return (Math.PI * degree) / 180\n}\n\n/**\n *\n * @category Math\n */\nexport function degree(radian: number) {\n return (180 * radian) / Math.PI\n}\n\n/**\n *\n * @category Math\n */\nexport function mapValue(\n value: number,\n inMin: number,\n inMax: number,\n outMin: number,\n outMax: number,\n) {\n return ((value - inMin) / (inMax - inMin)) * (outMax - outMin) + outMin\n}\n\n/**\n *\n * @category Math\n */\nexport function dbToGain(db: number) {\n return Math.pow(10, db / 20)\n}\n\n/**\n *\n * @category Math\n */\nexport function gainToDb(gain: number) {\n return 20 * (Math.log(gain) / Math.LN10)\n}\n","type Operator = '+' | '-' | '*' | '/'\n\n/**\n * @category Utility\n */\nexport function styleHelper(value: string | number): string\nexport function styleHelper(\n value: string | number,\n op: Operator,\n influencer?: number,\n): string\nexport function styleHelper(\n value: string | number,\n op?: Operator,\n influencer?: number,\n) {\n if (op && influencer) {\n if (typeof value == 'number') {\n if (op == '+') return `${value + influencer}px`\n if (op == '-') return `${value - influencer}px`\n if (op == '*') return `${value * influencer}px`\n if (op == '/') return `${value / influencer}px`\n } else {\n return `calc(${value}px ${op} ${influencer})`\n }\n } else {\n if (typeof value == 'number') {\n return `${value}px`\n } else {\n return value\n }\n }\n}\n\n/**\n * @category Utility\n */\nexport function isEmpty(obj: object) {\n return Object.keys(obj).length == 0\n}\n\n/**\n * @category Utility\n */\nexport function mod(n: number, m: number) {\n return ((n % m) + m) % m\n}\n\n/**\n * @category Utility\n */\nexport function xor(a = false, b = false) {\n return (a || b) && a != b\n}\n","import { mod } from './util'\n\n/**\n * @category MIDI\n */\nexport const whiteKeys = ['A', 'B', 'C', 'D', 'E', 'F', 'G'] as const\n\n/**\n * @category MIDI\n */\nexport type WhiteKey = (typeof whiteKeys)[number]\n\n/**\n * @category MIDI\n */\nexport const noteKeys = [\n 'C',\n 'C#',\n 'D',\n 'D#',\n 'E',\n 'F',\n 'F#',\n 'G',\n 'G#',\n 'A',\n 'A#',\n 'B',\n] as const\n\n/**\n * @category MIDI\n */\nexport type NoteKey = (typeof noteKeys)[number]\n\n/**\n * @category MIDI\n */\nexport function parseNoteName(noteName: string) {\n const m = noteName.match(/^([a-g])(#{0,2}|b{0,2})(-?\\d+)$/i)\n if (!m) throw new Error('Invalid note name')\n const [, letter, accidental, octave] = m\n return {\n letter: letter.toLocaleUpperCase() as WhiteKey,\n accidental: accidental as '#' | '##' | 'b' | 'bb' | '',\n octave: Number(octave),\n }\n}\n\n/**\n * Convert noteName to noteNumber\n * @category MIDI\n */\nexport function noteNumber(noteName: string) {\n const { letter, accidental, octave } = parseNoteName(noteName)\n const noteIndex = noteKeys.indexOf(letter.toLocaleUpperCase() as NoteKey)\n const accidentalValue = (accidental[0] == 'b' ? -1 : 1) * accidental.length\n return noteIndex + 12 * (Number(octave) + 1) + accidentalValue\n}\n\n/**\n * Convert noteNumber to noteName\n * C-1 = 0\n * G9 = 127\n * @param noteNumber noteNumber\n * @category MIDI\n */\nexport function noteName(noteNumber: number): `${NoteKey}${number}` {\n const noteIndex = mod(noteNumber, 12)\n const octave = Math.floor(noteNumber / 12) - 1\n return `${noteKeys[noteIndex]}${octave}`\n}\n\n/**\n * Convert noteNumber to noteKey\n * @category MIDI\n */\nexport function noteKey(noteNumber: number): NoteKey {\n return noteKeys[mod(noteNumber, 12)]\n}\n\n/**\n * @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'\n * @category MIDI\n */\nexport function isWhiteKey(note: number | string) {\n const n = typeof note == 'string' ? noteNumber(note) : note\n return (\n mod(n, 12) == 0 ||\n mod(n, 12) == 2 ||\n mod(n, 12) == 4 ||\n mod(n, 12) == 5 ||\n mod(n, 12) == 7 ||\n mod(n, 12) == 9 ||\n mod(n, 12) == 11\n )\n}\n\n/**\n * @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'\n * @category MIDI\n */\nexport function isBlackKey(note: number | string) {\n return !isWhiteKey(note)\n}\n\n/**\n * @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'\n * @param detune [cent]\n * @param a4 A4 frequency [Hz]\n * @returns frequency [Hz]\n * @category MIDI\n */\nexport function noteToFrequency(note: number | string, detune = 0, a4 = 440) {\n const n = typeof note == 'string' ? noteNumber(note) : note\n return (a4 / 32) * 2 ** ((n - 9 + detune / 100) / 12)\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["rawValue","degree","radian","noteName","noteNumber"],"sources":["../src/math.ts","../src/util.ts","../src/midi.ts"],"sourcesContent":["/**\n * clamp value between min and max\n * @category Math\n */\nexport function clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(value, max))\n}\n\n/**\n * Normalize the value from 0 to 1\n * @category Math\n */\nexport function normalizeValue(\n rawValue: number,\n min: number,\n max: number,\n skew = 1,\n) {\n if (min >= max) throw new RangeError('requirements: min < max')\n const v = clamp((rawValue - min) / (max - min), 0, 1)\n return Math.pow(v, skew)\n}\n\n/**\n * Convert normalized values back to raw values.\n * @category Math\n */\nexport function rawValue(\n normalizedValue: number,\n min: number,\n max: number,\n skew = 1,\n) {\n if (min >= max) throw new RangeError('requirements: min < max')\n const v =\n skew == 1\n ? clamp(normalizedValue, 0, 1)\n : Math.exp(Math.log(clamp(normalizedValue, 0, 1)) / skew)\n return min + v * (max - min)\n}\n\n/**\n *\n * @category Math\n */\nexport function skewWithCenterValue(\n centerValue: number,\n min: number,\n max: number,\n) {\n if (!(min <= centerValue && centerValue <= max))\n throw new RangeError('requirements: min <= centerValue <= max')\n return Math.log(0.5) / Math.log((centerValue - min) / (max - min))\n}\n\n/**\n *\n * @category Math\n */\nexport function stepValue(value: number, step: number) {\n if (step <= 0) throw new RangeError('requirements: step > 0')\n const quotient = Math.floor(value / step)\n const decimalDigits = decimalPart(step)?.length\n const v = toFixed(quotient * step, decimalDigits)\n const next = toFixed((quotient + 1) * step, decimalDigits)\n return Math.abs(value - v) < Math.abs(value - next) ? v : next\n}\n\n/**\n *\n * @category Math\n */\nexport function toFixed(x: number, fractionDigits?: number) {\n return Number(x.toFixed(fractionDigits))\n}\n\n/**\n *\n * @category Math\n */\nexport function integerPart(x: number | string): string | undefined {\n if (Number.isNaN(x)) {\n return undefined\n }\n return String(x).split('.')[0]\n}\n\n/**\n *\n * @category Math\n */\nexport function decimalPart(x: number | string): string | undefined {\n return String(x).split('.')[1]\n}\n\n/**\n *\n * @category Math\n */\nexport function radian(degree: number) {\n return (Math.PI * degree) / 180\n}\n\n/**\n *\n * @category Math\n */\nexport function degree(radian: number) {\n return (180 * radian) / Math.PI\n}\n\n/**\n *\n * @category Math\n */\nexport function mapValue(\n value: number,\n inMin: number,\n inMax: number,\n outMin: number,\n outMax: number,\n) {\n return ((value - inMin) / (inMax - inMin)) * (outMax - outMin) + outMin\n}\n\n/**\n *\n * @category Math\n */\nexport function dbToGain(db: number) {\n return Math.pow(10, db / 20)\n}\n\n/**\n *\n * @category Math\n */\nexport function gainToDb(gain: number) {\n return 20 * (Math.log(gain) / Math.LN10)\n}\n","type Operator = '+' | '-' | '*' | '/'\n\n/**\n * @category Utility\n */\nexport function styleHelper(value: string | number): string\nexport function styleHelper(\n value: string | number,\n op: Operator,\n influencer?: number,\n): string\nexport function styleHelper(\n value: string | number,\n op?: Operator,\n influencer?: number,\n) {\n if (op && influencer) {\n if (typeof value == 'number') {\n if (op == '+') return `${value + influencer}px`\n if (op == '-') return `${value - influencer}px`\n if (op == '*') return `${value * influencer}px`\n if (op == '/') return `${value / influencer}px`\n } else {\n return `calc(${value}px ${op} ${influencer})`\n }\n } else {\n if (typeof value == 'number') {\n return `${value}px`\n } else {\n return value\n }\n }\n}\n\n/**\n * @category Utility\n */\nexport function isEmpty(obj: object) {\n return Object.keys(obj).length == 0\n}\n\n/**\n * @category Utility\n */\nexport function mod(n: number, m: number) {\n return ((n % m) + m) % m\n}\n\n/**\n * @category Utility\n */\nexport function xor(a = false, b = false) {\n return (a || b) && a != b\n}\n","import { mod } from './util'\n\n/**\n * @category MIDI\n */\nexport const whiteKeys = ['A', 'B', 'C', 'D', 'E', 'F', 'G'] as const\n\n/**\n * @category MIDI\n */\nexport type WhiteKey = (typeof whiteKeys)[number]\n\n/**\n * @category MIDI\n */\nexport const noteKeys = [\n 'C',\n 'C#',\n 'D',\n 'D#',\n 'E',\n 'F',\n 'F#',\n 'G',\n 'G#',\n 'A',\n 'A#',\n 'B',\n] as const\n\n/**\n * @category MIDI\n */\nexport type NoteKey = (typeof noteKeys)[number]\n\n/**\n * @category MIDI\n */\nexport function parseNoteName(noteName: string) {\n const m = noteName.match(/^([a-g])(#{0,2}|b{0,2})(-?\\d+)$/i)\n if (!m) throw new Error('Invalid note name')\n const [, letter, accidental, octave] = m\n return {\n letter: letter.toLocaleUpperCase() as WhiteKey,\n accidental: accidental as '#' | '##' | 'b' | 'bb' | '',\n octave: Number(octave),\n }\n}\n\n/**\n * Convert noteName to noteNumber\n * @category MIDI\n */\nexport function noteNumber(noteName: string) {\n const { letter, accidental, octave } = parseNoteName(noteName)\n const noteIndex = noteKeys.indexOf(letter.toLocaleUpperCase() as NoteKey)\n const accidentalValue = (accidental[0] == 'b' ? -1 : 1) * accidental.length\n return noteIndex + 12 * (Number(octave) + 1) + accidentalValue\n}\n\n/**\n * Convert noteNumber to noteName\n * C-1 = 0\n * G9 = 127\n * @param noteNumber noteNumber\n * @category MIDI\n */\nexport function noteName(noteNumber: number): `${NoteKey}${number}` {\n const noteIndex = mod(noteNumber, 12)\n const octave = Math.floor(noteNumber / 12) - 1\n return `${noteKeys[noteIndex]}${octave}`\n}\n\n/**\n * Convert noteNumber to noteKey\n * @category MIDI\n */\nexport function noteKey(noteNumber: number): NoteKey {\n return noteKeys[mod(noteNumber, 12)]\n}\n\n/**\n * @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'\n * @category MIDI\n */\nexport function isWhiteKey(note: number | string) {\n const n = typeof note == 'string' ? noteNumber(note) : note\n return (\n mod(n, 12) == 0 ||\n mod(n, 12) == 2 ||\n mod(n, 12) == 4 ||\n mod(n, 12) == 5 ||\n mod(n, 12) == 7 ||\n mod(n, 12) == 9 ||\n mod(n, 12) == 11\n )\n}\n\n/**\n * @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'\n * @category MIDI\n */\nexport function isBlackKey(note: number | string) {\n return !isWhiteKey(note)\n}\n\n/**\n * @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'\n * @param detune [cent]\n * @param a4 A4 frequency [Hz]\n * @returns frequency [Hz]\n * @category MIDI\n */\nexport function noteToFrequency(note: number | string, detune = 0, a4 = 440) {\n const n = typeof note == 'string' ? noteNumber(note) : note\n return (a4 / 32) * 2 ** ((n - 9 + detune / 100) / 12)\n}\n"],"mappings":"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"}
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../../src/math.ts","../../src/midi.ts","../../src/types.ts","../../src/util.ts"],"sourcesContent":[],"mappings":";;AAIA;AAQA;AAeA;AAkBgB,iBAzCA,KAAA,CAyCmB,KAAA,EAAA,MAAA,EAAA,GAAA,EAAA,MAAA,EAAA,GAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAcnC;AAaA;AAQA;AAWA;AAQgB,iBAvFA,cAAA,CAuFM,QAAA,EAAA,MAAA,EAAA,GAAA,EAAA,MAAA,EAAA,GAAA,EAAA,MAAA,EAAA,IAAA,CAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAQtB;AAQA;AAcA;AAQA;iBA9GgB,QAAA;;;ACtBhB;AAKA;AAKa,iBD8BG,mBAAA,CCjBN,WAAA,EAAA,MAAA,EAAA,GAAA,EAAA,MAAA,EAAA,GAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAKV;AAKA;AAeA;AAcA;AAUgB,iBDlBA,SAAA,CCkBoC,KAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAQpD;AAiBA;AAWA;;iBDzCgB,OAAA;;AEpEhB;;;iBF4EgB,WAAA;;AG3EhB;AACA;AA+BA;AAOgB,iBH+CA,WAAA,CG/CG,CAAA,EAAA,MAAA,GAAA,MAAA,CAAA,EAAA,MAAA,GAAA,SAAA;AAOnB;;;;iBHgDgB,MAAA;;;;;iBAQA,MAAA;;;;;iBAQA,QAAA;;;;;iBAcA,QAAA;;;;;iBAQA,QAAA;;;;;AArIhB;AAQA;AAegB,cCtBH,SDsBW,EAAA,SAAA,CAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,CAAA;AAkBxB;AAcA;AAaA;AAQgB,KCtEJ,QAAA,GDsEe,CAAA,OCtEI,SDsEJ,CAAA,CAAA,MAAA,CAAA;AAW3B;AAQA;AAQA;AAQgB,cCpGH,QDoGW,EAAA,SAAA,CAAA,GAAA,EAAA,IAAA,EAAA,GAAA,EAAA,IAAA,EAAA,GAAA,EAAA,GAAA,EAAA,IAAA,EAAA,GAAA,EAAA,IAAA,EAAA,GAAA,EAAA,IAAA,EAAA,GAAA,CAAA;AAcxB;AAQA;;KCxGY,OAAA,WAAkB;;AA5B9B;AAKA;AAKa,iBAuBG,aAAA,CAVN,QAAA,EAAA,MAAA,CAAA,EAAA;EAKE,MAAA,EAU8B,QAVvB;EAKH,UAAA,EAAA,GAAA,GAAa,IAAA,GAAA,GAKa,GAAA,
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../src/math.ts","../../src/midi.ts","../../src/types.ts","../../src/util.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/math.ts","../../src/midi.ts","../../src/types.ts","../../src/util.ts"],"sourcesContent":[],"mappings":";;AAIA;AAQA;AAeA;AAkBgB,iBAzCA,KAAA,CAyCmB,KAAA,EAAA,MAAA,EAAA,GAAA,EAAA,MAAA,EAAA,GAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAcnC;AAaA;AAQA;AAWA;AAQgB,iBAvFA,cAAA,CAuFM,QAAA,EAAA,MAAA,EAAA,GAAA,EAAA,MAAA,EAAA,GAAA,EAAA,MAAA,EAAA,IAAA,CAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAQtB;AAQA;AAcA;AAQA;iBA9GgB,QAAA;;;ACtBhB;AAKA;AAKa,iBD8BG,mBAAA,CCjBN,WAAA,EAAA,MAAA,EAAA,GAAA,EAAA,MAAA,EAAA,GAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAKV;AAKA;AAeA;AAcA;AAUgB,iBDlBA,SAAA,CCkBoC,KAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAQpD;AAiBA;AAWA;;iBDzCgB,OAAA;;AEpEhB;;;iBF4EgB,WAAA;;AG3EhB;AACA;AA+BA;AAOgB,iBH+CA,WAAA,CG/CG,CAAA,EAAA,MAAA,GAAA,MAAA,CAAA,EAAA,MAAA,GAAA,SAAA;AAOnB;;;;iBHgDgB,MAAA;;;;;iBAQA,MAAA;;;;;iBAQA,QAAA;;;;;iBAcA,QAAA;;;;;iBAQA,QAAA;;;;;AArIhB;AAQA;AAegB,cCtBH,SDsBW,EAAA,SAAA,CAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,CAAA;AAkBxB;AAcA;AAaA;AAQgB,KCtEJ,QAAA,GDsEe,CAAA,OCtEI,SDsEJ,CAAA,CAAA,MAAA,CAAA;AAW3B;AAQA;AAQA;AAQgB,cCpGH,QDoGW,EAAA,SAAA,CAAA,GAAA,EAAA,IAAA,EAAA,GAAA,EAAA,IAAA,EAAA,GAAA,EAAA,GAAA,EAAA,IAAA,EAAA,GAAA,EAAA,IAAA,EAAA,GAAA,EAAA,IAAA,EAAA,GAAA,CAAA;AAcxB;AAQA;;KCxGY,OAAA,WAAkB;;AA5B9B;AAKA;AAKa,iBAuBG,aAAA,CAVN,QAAA,EAAA,MAAA,CAAA,EAAA;EAKE,MAAA,EAU8B,QAVvB;EAKH,UAAA,EAAA,GAAA,GAAa,IAAA,GAAA,GAKa,GAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/math.ts","../../src/midi.ts","../../src/types.ts","../../src/util.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -21,8 +21,7 @@ function normalizeValue(rawValue$1, min, max, skew = 1) {
|
|
|
21
21
|
*/
|
|
22
22
|
function rawValue(normalizedValue, min, max, skew = 1) {
|
|
23
23
|
if (min >= max) throw new RangeError("requirements: min < max");
|
|
24
|
-
|
|
25
|
-
return min + v * (max - min);
|
|
24
|
+
return min + (skew == 1 ? clamp(normalizedValue, 0, 1) : Math.exp(Math.log(clamp(normalizedValue, 0, 1)) / skew)) * (max - min);
|
|
26
25
|
}
|
|
27
26
|
/**
|
|
28
27
|
*
|
|
@@ -56,7 +55,7 @@ function toFixed(x, fractionDigits) {
|
|
|
56
55
|
* @category Math
|
|
57
56
|
*/
|
|
58
57
|
function integerPart(x) {
|
|
59
|
-
if (Number.isNaN(x)) return
|
|
58
|
+
if (Number.isNaN(x)) return;
|
|
60
59
|
return String(x).split(".")[0];
|
|
61
60
|
}
|
|
62
61
|
/**
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["value: number","min: number","max: number","rawValue: number","rawValue","normalizedValue: number","centerValue: number","step: number","x: number","fractionDigits?: number","x: number | string","degree: number","degree","radian: number","radian","inMin: number","inMax: number","outMin: number","outMax: number","db: number","gain: number","value: string | number","op?: Operator","influencer?: number","obj: object","n: number","m: number","noteName: string","noteName","noteNumber: number","noteNumber","note: number | string"],"sources":["../src/math.ts","../src/util.ts","../src/midi.ts"],"sourcesContent":["/**\n * clamp value between min and max\n * @category Math\n */\nexport function clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(value, max))\n}\n\n/**\n * Normalize the value from 0 to 1\n * @category Math\n */\nexport function normalizeValue(\n rawValue: number,\n min: number,\n max: number,\n skew = 1,\n) {\n if (min >= max) throw new RangeError('requirements: min < max')\n const v = clamp((rawValue - min) / (max - min), 0, 1)\n return Math.pow(v, skew)\n}\n\n/**\n * Convert normalized values back to raw values.\n * @category Math\n */\nexport function rawValue(\n normalizedValue: number,\n min: number,\n max: number,\n skew = 1,\n) {\n if (min >= max) throw new RangeError('requirements: min < max')\n const v =\n skew == 1\n ? clamp(normalizedValue, 0, 1)\n : Math.exp(Math.log(clamp(normalizedValue, 0, 1)) / skew)\n return min + v * (max - min)\n}\n\n/**\n *\n * @category Math\n */\nexport function skewWithCenterValue(\n centerValue: number,\n min: number,\n max: number,\n) {\n if (!(min <= centerValue && centerValue <= max))\n throw new RangeError('requirements: min <= centerValue <= max')\n return Math.log(0.5) / Math.log((centerValue - min) / (max - min))\n}\n\n/**\n *\n * @category Math\n */\nexport function stepValue(value: number, step: number) {\n if (step <= 0) throw new RangeError('requirements: step > 0')\n const quotient = Math.floor(value / step)\n const decimalDigits = decimalPart(step)?.length\n const v = toFixed(quotient * step, decimalDigits)\n const next = toFixed((quotient + 1) * step, decimalDigits)\n return Math.abs(value - v) < Math.abs(value - next) ? v : next\n}\n\n/**\n *\n * @category Math\n */\nexport function toFixed(x: number, fractionDigits?: number) {\n return Number(x.toFixed(fractionDigits))\n}\n\n/**\n *\n * @category Math\n */\nexport function integerPart(x: number | string): string | undefined {\n if (Number.isNaN(x)) {\n return undefined\n }\n return String(x).split('.')[0]\n}\n\n/**\n *\n * @category Math\n */\nexport function decimalPart(x: number | string): string | undefined {\n return String(x).split('.')[1]\n}\n\n/**\n *\n * @category Math\n */\nexport function radian(degree: number) {\n return (Math.PI * degree) / 180\n}\n\n/**\n *\n * @category Math\n */\nexport function degree(radian: number) {\n return (180 * radian) / Math.PI\n}\n\n/**\n *\n * @category Math\n */\nexport function mapValue(\n value: number,\n inMin: number,\n inMax: number,\n outMin: number,\n outMax: number,\n) {\n return ((value - inMin) / (inMax - inMin)) * (outMax - outMin) + outMin\n}\n\n/**\n *\n * @category Math\n */\nexport function dbToGain(db: number) {\n return Math.pow(10, db / 20)\n}\n\n/**\n *\n * @category Math\n */\nexport function gainToDb(gain: number) {\n return 20 * (Math.log(gain) / Math.LN10)\n}\n","type Operator = '+' | '-' | '*' | '/'\n\n/**\n * @category Utility\n */\nexport function styleHelper(value: string | number): string\nexport function styleHelper(\n value: string | number,\n op: Operator,\n influencer?: number,\n): string\nexport function styleHelper(\n value: string | number,\n op?: Operator,\n influencer?: number,\n) {\n if (op && influencer) {\n if (typeof value == 'number') {\n if (op == '+') return `${value + influencer}px`\n if (op == '-') return `${value - influencer}px`\n if (op == '*') return `${value * influencer}px`\n if (op == '/') return `${value / influencer}px`\n } else {\n return `calc(${value}px ${op} ${influencer})`\n }\n } else {\n if (typeof value == 'number') {\n return `${value}px`\n } else {\n return value\n }\n }\n}\n\n/**\n * @category Utility\n */\nexport function isEmpty(obj: object) {\n return Object.keys(obj).length == 0\n}\n\n/**\n * @category Utility\n */\nexport function mod(n: number, m: number) {\n return ((n % m) + m) % m\n}\n\n/**\n * @category Utility\n */\nexport function xor(a = false, b = false) {\n return (a || b) && a != b\n}\n","import { mod } from './util'\n\n/**\n * @category MIDI\n */\nexport const whiteKeys = ['A', 'B', 'C', 'D', 'E', 'F', 'G'] as const\n\n/**\n * @category MIDI\n */\nexport type WhiteKey = (typeof whiteKeys)[number]\n\n/**\n * @category MIDI\n */\nexport const noteKeys = [\n 'C',\n 'C#',\n 'D',\n 'D#',\n 'E',\n 'F',\n 'F#',\n 'G',\n 'G#',\n 'A',\n 'A#',\n 'B',\n] as const\n\n/**\n * @category MIDI\n */\nexport type NoteKey = (typeof noteKeys)[number]\n\n/**\n * @category MIDI\n */\nexport function parseNoteName(noteName: string) {\n const m = noteName.match(/^([a-g])(#{0,2}|b{0,2})(-?\\d+)$/i)\n if (!m) throw new Error('Invalid note name')\n const [, letter, accidental, octave] = m\n return {\n letter: letter.toLocaleUpperCase() as WhiteKey,\n accidental: accidental as '#' | '##' | 'b' | 'bb' | '',\n octave: Number(octave),\n }\n}\n\n/**\n * Convert noteName to noteNumber\n * @category MIDI\n */\nexport function noteNumber(noteName: string) {\n const { letter, accidental, octave } = parseNoteName(noteName)\n const noteIndex = noteKeys.indexOf(letter.toLocaleUpperCase() as NoteKey)\n const accidentalValue = (accidental[0] == 'b' ? -1 : 1) * accidental.length\n return noteIndex + 12 * (Number(octave) + 1) + accidentalValue\n}\n\n/**\n * Convert noteNumber to noteName\n * C-1 = 0\n * G9 = 127\n * @param noteNumber noteNumber\n * @category MIDI\n */\nexport function noteName(noteNumber: number): `${NoteKey}${number}` {\n const noteIndex = mod(noteNumber, 12)\n const octave = Math.floor(noteNumber / 12) - 1\n return `${noteKeys[noteIndex]}${octave}`\n}\n\n/**\n * Convert noteNumber to noteKey\n * @category MIDI\n */\nexport function noteKey(noteNumber: number): NoteKey {\n return noteKeys[mod(noteNumber, 12)]\n}\n\n/**\n * @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'\n * @category MIDI\n */\nexport function isWhiteKey(note: number | string) {\n const n = typeof note == 'string' ? noteNumber(note) : note\n return (\n mod(n, 12) == 0 ||\n mod(n, 12) == 2 ||\n mod(n, 12) == 4 ||\n mod(n, 12) == 5 ||\n mod(n, 12) == 7 ||\n mod(n, 12) == 9 ||\n mod(n, 12) == 11\n )\n}\n\n/**\n * @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'\n * @category MIDI\n */\nexport function isBlackKey(note: number | string) {\n return !isWhiteKey(note)\n}\n\n/**\n * @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'\n * @param detune [cent]\n * @param a4 A4 frequency [Hz]\n * @returns frequency [Hz]\n * @category MIDI\n */\nexport function noteToFrequency(note: number | string, detune = 0, a4 = 440) {\n const n = typeof note == 'string' ? noteNumber(note) : note\n return (a4 / 32) * 2 ** ((n - 9 + detune / 100) / 12)\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["rawValue","degree","radian","noteName","noteNumber"],"sources":["../src/math.ts","../src/util.ts","../src/midi.ts"],"sourcesContent":["/**\n * clamp value between min and max\n * @category Math\n */\nexport function clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(value, max))\n}\n\n/**\n * Normalize the value from 0 to 1\n * @category Math\n */\nexport function normalizeValue(\n rawValue: number,\n min: number,\n max: number,\n skew = 1,\n) {\n if (min >= max) throw new RangeError('requirements: min < max')\n const v = clamp((rawValue - min) / (max - min), 0, 1)\n return Math.pow(v, skew)\n}\n\n/**\n * Convert normalized values back to raw values.\n * @category Math\n */\nexport function rawValue(\n normalizedValue: number,\n min: number,\n max: number,\n skew = 1,\n) {\n if (min >= max) throw new RangeError('requirements: min < max')\n const v =\n skew == 1\n ? clamp(normalizedValue, 0, 1)\n : Math.exp(Math.log(clamp(normalizedValue, 0, 1)) / skew)\n return min + v * (max - min)\n}\n\n/**\n *\n * @category Math\n */\nexport function skewWithCenterValue(\n centerValue: number,\n min: number,\n max: number,\n) {\n if (!(min <= centerValue && centerValue <= max))\n throw new RangeError('requirements: min <= centerValue <= max')\n return Math.log(0.5) / Math.log((centerValue - min) / (max - min))\n}\n\n/**\n *\n * @category Math\n */\nexport function stepValue(value: number, step: number) {\n if (step <= 0) throw new RangeError('requirements: step > 0')\n const quotient = Math.floor(value / step)\n const decimalDigits = decimalPart(step)?.length\n const v = toFixed(quotient * step, decimalDigits)\n const next = toFixed((quotient + 1) * step, decimalDigits)\n return Math.abs(value - v) < Math.abs(value - next) ? v : next\n}\n\n/**\n *\n * @category Math\n */\nexport function toFixed(x: number, fractionDigits?: number) {\n return Number(x.toFixed(fractionDigits))\n}\n\n/**\n *\n * @category Math\n */\nexport function integerPart(x: number | string): string | undefined {\n if (Number.isNaN(x)) {\n return undefined\n }\n return String(x).split('.')[0]\n}\n\n/**\n *\n * @category Math\n */\nexport function decimalPart(x: number | string): string | undefined {\n return String(x).split('.')[1]\n}\n\n/**\n *\n * @category Math\n */\nexport function radian(degree: number) {\n return (Math.PI * degree) / 180\n}\n\n/**\n *\n * @category Math\n */\nexport function degree(radian: number) {\n return (180 * radian) / Math.PI\n}\n\n/**\n *\n * @category Math\n */\nexport function mapValue(\n value: number,\n inMin: number,\n inMax: number,\n outMin: number,\n outMax: number,\n) {\n return ((value - inMin) / (inMax - inMin)) * (outMax - outMin) + outMin\n}\n\n/**\n *\n * @category Math\n */\nexport function dbToGain(db: number) {\n return Math.pow(10, db / 20)\n}\n\n/**\n *\n * @category Math\n */\nexport function gainToDb(gain: number) {\n return 20 * (Math.log(gain) / Math.LN10)\n}\n","type Operator = '+' | '-' | '*' | '/'\n\n/**\n * @category Utility\n */\nexport function styleHelper(value: string | number): string\nexport function styleHelper(\n value: string | number,\n op: Operator,\n influencer?: number,\n): string\nexport function styleHelper(\n value: string | number,\n op?: Operator,\n influencer?: number,\n) {\n if (op && influencer) {\n if (typeof value == 'number') {\n if (op == '+') return `${value + influencer}px`\n if (op == '-') return `${value - influencer}px`\n if (op == '*') return `${value * influencer}px`\n if (op == '/') return `${value / influencer}px`\n } else {\n return `calc(${value}px ${op} ${influencer})`\n }\n } else {\n if (typeof value == 'number') {\n return `${value}px`\n } else {\n return value\n }\n }\n}\n\n/**\n * @category Utility\n */\nexport function isEmpty(obj: object) {\n return Object.keys(obj).length == 0\n}\n\n/**\n * @category Utility\n */\nexport function mod(n: number, m: number) {\n return ((n % m) + m) % m\n}\n\n/**\n * @category Utility\n */\nexport function xor(a = false, b = false) {\n return (a || b) && a != b\n}\n","import { mod } from './util'\n\n/**\n * @category MIDI\n */\nexport const whiteKeys = ['A', 'B', 'C', 'D', 'E', 'F', 'G'] as const\n\n/**\n * @category MIDI\n */\nexport type WhiteKey = (typeof whiteKeys)[number]\n\n/**\n * @category MIDI\n */\nexport const noteKeys = [\n 'C',\n 'C#',\n 'D',\n 'D#',\n 'E',\n 'F',\n 'F#',\n 'G',\n 'G#',\n 'A',\n 'A#',\n 'B',\n] as const\n\n/**\n * @category MIDI\n */\nexport type NoteKey = (typeof noteKeys)[number]\n\n/**\n * @category MIDI\n */\nexport function parseNoteName(noteName: string) {\n const m = noteName.match(/^([a-g])(#{0,2}|b{0,2})(-?\\d+)$/i)\n if (!m) throw new Error('Invalid note name')\n const [, letter, accidental, octave] = m\n return {\n letter: letter.toLocaleUpperCase() as WhiteKey,\n accidental: accidental as '#' | '##' | 'b' | 'bb' | '',\n octave: Number(octave),\n }\n}\n\n/**\n * Convert noteName to noteNumber\n * @category MIDI\n */\nexport function noteNumber(noteName: string) {\n const { letter, accidental, octave } = parseNoteName(noteName)\n const noteIndex = noteKeys.indexOf(letter.toLocaleUpperCase() as NoteKey)\n const accidentalValue = (accidental[0] == 'b' ? -1 : 1) * accidental.length\n return noteIndex + 12 * (Number(octave) + 1) + accidentalValue\n}\n\n/**\n * Convert noteNumber to noteName\n * C-1 = 0\n * G9 = 127\n * @param noteNumber noteNumber\n * @category MIDI\n */\nexport function noteName(noteNumber: number): `${NoteKey}${number}` {\n const noteIndex = mod(noteNumber, 12)\n const octave = Math.floor(noteNumber / 12) - 1\n return `${noteKeys[noteIndex]}${octave}`\n}\n\n/**\n * Convert noteNumber to noteKey\n * @category MIDI\n */\nexport function noteKey(noteNumber: number): NoteKey {\n return noteKeys[mod(noteNumber, 12)]\n}\n\n/**\n * @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'\n * @category MIDI\n */\nexport function isWhiteKey(note: number | string) {\n const n = typeof note == 'string' ? noteNumber(note) : note\n return (\n mod(n, 12) == 0 ||\n mod(n, 12) == 2 ||\n mod(n, 12) == 4 ||\n mod(n, 12) == 5 ||\n mod(n, 12) == 7 ||\n mod(n, 12) == 9 ||\n mod(n, 12) == 11\n )\n}\n\n/**\n * @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'\n * @category MIDI\n */\nexport function isBlackKey(note: number | string) {\n return !isWhiteKey(note)\n}\n\n/**\n * @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'\n * @param detune [cent]\n * @param a4 A4 frequency [Hz]\n * @returns frequency [Hz]\n * @category MIDI\n */\nexport function noteToFrequency(note: number | string, detune = 0, a4 = 440) {\n const n = typeof note == 'string' ? noteNumber(note) : note\n return (a4 / 32) * 2 ** ((n - 9 + detune / 100) / 12)\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tremolo-ui/functions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "functions used in @tremolo-ui/react",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
7
|
+
"main": "dist/index.cjs",
|
|
8
|
+
"module": "dist/index.js",
|
|
9
|
+
"types": "dist/index.d.cts",
|
|
7
10
|
"scripts": {
|
|
8
11
|
"test": "jest",
|
|
9
12
|
"typecheck": "tsc --noEmit",
|
|
@@ -41,32 +44,12 @@
|
|
|
41
44
|
"exports": {
|
|
42
45
|
".": {
|
|
43
46
|
"require": {
|
|
44
|
-
"
|
|
45
|
-
"
|
|
47
|
+
"types": "./dist/index.d.cts",
|
|
48
|
+
"default": "./dist/index.cjs"
|
|
46
49
|
},
|
|
47
50
|
"import": {
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
}
|
|
51
|
-
},
|
|
52
|
-
"./NumberInput": {
|
|
53
|
-
"require": {
|
|
54
|
-
"default": "./dist/NumberInput/type.cjs",
|
|
55
|
-
"types": "./dist/types/NumberInput/type.d.cts"
|
|
56
|
-
},
|
|
57
|
-
"import": {
|
|
58
|
-
"default": "./dist/NumberInput/type.js",
|
|
59
|
-
"types": "./dist/types/NumberInput/type.d.ts"
|
|
60
|
-
}
|
|
61
|
-
},
|
|
62
|
-
"./Slider": {
|
|
63
|
-
"require": {
|
|
64
|
-
"default": "./dist/Slider/type.cjs",
|
|
65
|
-
"types": "./dist/types/Slider/type.d.cts"
|
|
66
|
-
},
|
|
67
|
-
"import": {
|
|
68
|
-
"default": "./dist/Slider/type.js",
|
|
69
|
-
"types": "./dist/types/Slider/type.d.ts"
|
|
51
|
+
"types": "./dist/index.d.ts",
|
|
52
|
+
"default": "./dist/index.js"
|
|
70
53
|
}
|
|
71
54
|
}
|
|
72
55
|
}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
//#region src/components/NumberInput/type.ts
|
|
3
|
-
function selectUnit(units, value) {
|
|
4
|
-
let i = 0;
|
|
5
|
-
for (; i < units.length; i++) if (Math.abs(units[i][1]) > Math.abs(value)) break;
|
|
6
|
-
return units[Math.max(0, i - 1)];
|
|
7
|
-
}
|
|
8
|
-
function parseValue(inputString, units, digit) {
|
|
9
|
-
const str = inputString.trim();
|
|
10
|
-
if (!units || typeof units == "string") {
|
|
11
|
-
const m$1 = str.match(/-?\d+(\.\d+)?/);
|
|
12
|
-
let v = Number(m$1?.[0] ?? "0");
|
|
13
|
-
v = isNaN(v) ? 0 : v;
|
|
14
|
-
return {
|
|
15
|
-
rawValue: v,
|
|
16
|
-
formatValue: (digit != void 0 ? v.toFixed(digit) : v) + (units ?? ""),
|
|
17
|
-
unit: units ?? ""
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
const unitList = units.map(([u, _s]) => u);
|
|
21
|
-
const scaleList = units.map(([_u, s]) => s);
|
|
22
|
-
let rawValue = 0;
|
|
23
|
-
let unit = unitList[0];
|
|
24
|
-
let formatValue = (digit != void 0 ? rawValue.toFixed(digit) : rawValue) + unit;
|
|
25
|
-
const m = str.match(/^(-?\d+(\.\d+)?)\s*(\w*)$/);
|
|
26
|
-
if (m) {
|
|
27
|
-
rawValue = Number(m[1]) || 0;
|
|
28
|
-
const uIndex = unitList.indexOf(m[3]);
|
|
29
|
-
rawValue *= uIndex != -1 ? scaleList[uIndex] : 1;
|
|
30
|
-
const [u, scale] = selectUnit(units, rawValue);
|
|
31
|
-
const v = rawValue / scale;
|
|
32
|
-
formatValue = (digit != void 0 ? v.toFixed(digit) : v) + u;
|
|
33
|
-
unit = u;
|
|
34
|
-
}
|
|
35
|
-
return {
|
|
36
|
-
rawValue,
|
|
37
|
-
formatValue,
|
|
38
|
-
unit
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
//#endregion
|
|
43
|
-
exports.parseValue = parseValue;
|
|
44
|
-
exports.selectUnit = selectUnit;
|
|
45
|
-
//# sourceMappingURL=type.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"type.cjs","names":["units: Units","value: number","inputString: string","units?: string | Units","digit?: number","m"],"sources":["../../src/components/NumberInput/type.ts"],"sourcesContent":["/**\n * @module NumberInput\n */\n\n/**\n * [unit, scale][]\n * @example\n * [['Hz', 1], ['kHz', 1000]]\n */\nexport type Units = [string, number][]\n\nexport function selectUnit(units: Units, value: number): [string, number] {\n let i = 0\n for (; i < units.length; i++) {\n if (Math.abs(units[i][1]) > Math.abs(value)) break\n }\n return units[Math.max(0, i - 1)]\n}\n\nexport function parseValue(\n inputString: string,\n units?: string | Units,\n digit?: number,\n): {\n rawValue: number\n formatValue: string\n unit: string\n} {\n const str = inputString.trim()\n if (!units || typeof units == 'string') {\n const m = str.match(/-?\\d+(\\.\\d+)?/)\n let v = Number(m?.[0] ?? '0')\n v = isNaN(v) ? 0 : v\n return {\n rawValue: v,\n formatValue: (digit != undefined ? v.toFixed(digit) : v) + (units ?? ''),\n unit: units ?? '',\n }\n }\n\n const unitList = units.map(([u, _s]) => u)\n const scaleList = units.map(([_u, s]) => s)\n let rawValue = 0\n let unit = unitList[0]\n let formatValue =\n (digit != undefined ? rawValue.toFixed(digit) : rawValue) + unit\n const m = str.match(/^(-?\\d+(\\.\\d+)?)\\s*(\\w*)$/)\n if (m) {\n rawValue = Number(m[1]) || 0\n const uIndex = unitList.indexOf(m[3])\n rawValue *= uIndex != -1 ? scaleList[uIndex] : 1\n const [u, scale] = selectUnit(units, rawValue)\n const v = rawValue / scale\n formatValue = (digit != undefined ? v.toFixed(digit) : v) + u\n unit = u\n }\n return {\n rawValue: rawValue,\n formatValue: formatValue,\n unit: unit,\n }\n}\n"],"mappings":";;AAWA,SAAgB,WAAWA,OAAcC,OAAiC;CACxE,IAAI,IAAI;AACR,QAAO,IAAI,MAAM,QAAQ,IACvB,KAAI,KAAK,IAAI,MAAM,GAAG,GAAG,GAAG,KAAK,IAAI,MAAM,CAAE;AAE/C,QAAO,MAAM,KAAK,IAAI,GAAG,IAAI,EAAE;AAChC;AAED,SAAgB,WACdC,aACAC,OACAC,OAKA;CACA,MAAM,MAAM,YAAY,MAAM;AAC9B,MAAK,gBAAgB,SAAS,UAAU;EACtC,MAAMC,MAAI,IAAI,MAAM,gBAAgB;EACpC,IAAI,IAAI,OAAOA,MAAI,MAAM,IAAI;AAC7B,MAAI,MAAM,EAAE,GAAG,IAAI;AACnB,SAAO;GACL,UAAU;GACV,cAAc,kBAAqB,EAAE,QAAQ,MAAM,GAAG,MAAM,SAAS;GACrE,MAAM,SAAS;EAChB;CACF;CAED,MAAM,WAAW,MAAM,IAAI,CAAC,CAAC,GAAG,GAAG,KAAK,EAAE;CAC1C,MAAM,YAAY,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;CAC3C,IAAI,WAAW;CACf,IAAI,OAAO,SAAS;CACpB,IAAI,eACD,kBAAqB,SAAS,QAAQ,MAAM,GAAG,YAAY;CAC9D,MAAM,IAAI,IAAI,MAAM,4BAA4B;AAChD,KAAI,GAAG;AACL,aAAW,OAAO,EAAE,GAAG,IAAI;EAC3B,MAAM,SAAS,SAAS,QAAQ,EAAE,GAAG;AACrC,cAAY,UAAU,KAAK,UAAU,UAAU;EAC/C,MAAM,CAAC,GAAG,MAAM,GAAG,WAAW,OAAO,SAAS;EAC9C,MAAM,IAAI,WAAW;AACrB,iBAAe,kBAAqB,EAAE,QAAQ,MAAM,GAAG,KAAK;AAC5D,SAAO;CACR;AACD,QAAO;EACK;EACG;EACP;CACP;AACF"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
//#region src/components/NumberInput/type.d.ts
|
|
2
|
-
/**
|
|
3
|
-
* @module NumberInput
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* [unit, scale][]
|
|
7
|
-
* @example
|
|
8
|
-
* [['Hz', 1], ['kHz', 1000]]
|
|
9
|
-
*/
|
|
10
|
-
type Units = [string, number][];
|
|
11
|
-
declare function selectUnit(units: Units, value: number): [string, number];
|
|
12
|
-
declare function parseValue(inputString: string, units?: string | Units, digit?: number): {
|
|
13
|
-
rawValue: number;
|
|
14
|
-
formatValue: string;
|
|
15
|
-
unit: string;
|
|
16
|
-
};
|
|
17
|
-
//# sourceMappingURL=type.d.ts.map
|
|
18
|
-
//#endregion
|
|
19
|
-
export { Units, parseValue, selectUnit };
|
|
20
|
-
//# sourceMappingURL=type.d.cts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"type.d.cts","names":[],"sources":["../../../src/components/NumberInput/type.ts"],"sourcesContent":[],"mappings":";;AASA;AAEA;AAQA;;;;;KAVY,KAAA;iBAEI,UAAA,QAAkB;iBAQlB,UAAA,uCAEG"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
//#region src/components/NumberInput/type.d.ts
|
|
2
|
-
/**
|
|
3
|
-
* @module NumberInput
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* [unit, scale][]
|
|
7
|
-
* @example
|
|
8
|
-
* [['Hz', 1], ['kHz', 1000]]
|
|
9
|
-
*/
|
|
10
|
-
type Units = [string, number][];
|
|
11
|
-
declare function selectUnit(units: Units, value: number): [string, number];
|
|
12
|
-
declare function parseValue(inputString: string, units?: string | Units, digit?: number): {
|
|
13
|
-
rawValue: number;
|
|
14
|
-
formatValue: string;
|
|
15
|
-
unit: string;
|
|
16
|
-
};
|
|
17
|
-
//# sourceMappingURL=type.d.ts.map
|
|
18
|
-
//#endregion
|
|
19
|
-
export { Units, parseValue, selectUnit };
|
|
20
|
-
//# sourceMappingURL=type.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"type.d.ts","names":[],"sources":["../../../src/components/NumberInput/type.ts"],"sourcesContent":[],"mappings":";;AASA;AAEA;AAQA;;;;;KAVY,KAAA;iBAEI,UAAA,QAAkB;iBAQlB,UAAA,uCAEG"}
|
package/dist/NumberInput/type.js
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
//#region src/components/NumberInput/type.ts
|
|
2
|
-
function selectUnit(units, value) {
|
|
3
|
-
let i = 0;
|
|
4
|
-
for (; i < units.length; i++) if (Math.abs(units[i][1]) > Math.abs(value)) break;
|
|
5
|
-
return units[Math.max(0, i - 1)];
|
|
6
|
-
}
|
|
7
|
-
function parseValue(inputString, units, digit) {
|
|
8
|
-
const str = inputString.trim();
|
|
9
|
-
if (!units || typeof units == "string") {
|
|
10
|
-
const m$1 = str.match(/-?\d+(\.\d+)?/);
|
|
11
|
-
let v = Number(m$1?.[0] ?? "0");
|
|
12
|
-
v = isNaN(v) ? 0 : v;
|
|
13
|
-
return {
|
|
14
|
-
rawValue: v,
|
|
15
|
-
formatValue: (digit != void 0 ? v.toFixed(digit) : v) + (units ?? ""),
|
|
16
|
-
unit: units ?? ""
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
const unitList = units.map(([u, _s]) => u);
|
|
20
|
-
const scaleList = units.map(([_u, s]) => s);
|
|
21
|
-
let rawValue = 0;
|
|
22
|
-
let unit = unitList[0];
|
|
23
|
-
let formatValue = (digit != void 0 ? rawValue.toFixed(digit) : rawValue) + unit;
|
|
24
|
-
const m = str.match(/^(-?\d+(\.\d+)?)\s*(\w*)$/);
|
|
25
|
-
if (m) {
|
|
26
|
-
rawValue = Number(m[1]) || 0;
|
|
27
|
-
const uIndex = unitList.indexOf(m[3]);
|
|
28
|
-
rawValue *= uIndex != -1 ? scaleList[uIndex] : 1;
|
|
29
|
-
const [u, scale] = selectUnit(units, rawValue);
|
|
30
|
-
const v = rawValue / scale;
|
|
31
|
-
formatValue = (digit != void 0 ? v.toFixed(digit) : v) + u;
|
|
32
|
-
unit = u;
|
|
33
|
-
}
|
|
34
|
-
return {
|
|
35
|
-
rawValue,
|
|
36
|
-
formatValue,
|
|
37
|
-
unit
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
//#endregion
|
|
42
|
-
export { parseValue, selectUnit };
|
|
43
|
-
//# sourceMappingURL=type.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"type.js","names":["units: Units","value: number","inputString: string","units?: string | Units","digit?: number","m"],"sources":["../../src/components/NumberInput/type.ts"],"sourcesContent":["/**\n * @module NumberInput\n */\n\n/**\n * [unit, scale][]\n * @example\n * [['Hz', 1], ['kHz', 1000]]\n */\nexport type Units = [string, number][]\n\nexport function selectUnit(units: Units, value: number): [string, number] {\n let i = 0\n for (; i < units.length; i++) {\n if (Math.abs(units[i][1]) > Math.abs(value)) break\n }\n return units[Math.max(0, i - 1)]\n}\n\nexport function parseValue(\n inputString: string,\n units?: string | Units,\n digit?: number,\n): {\n rawValue: number\n formatValue: string\n unit: string\n} {\n const str = inputString.trim()\n if (!units || typeof units == 'string') {\n const m = str.match(/-?\\d+(\\.\\d+)?/)\n let v = Number(m?.[0] ?? '0')\n v = isNaN(v) ? 0 : v\n return {\n rawValue: v,\n formatValue: (digit != undefined ? v.toFixed(digit) : v) + (units ?? ''),\n unit: units ?? '',\n }\n }\n\n const unitList = units.map(([u, _s]) => u)\n const scaleList = units.map(([_u, s]) => s)\n let rawValue = 0\n let unit = unitList[0]\n let formatValue =\n (digit != undefined ? rawValue.toFixed(digit) : rawValue) + unit\n const m = str.match(/^(-?\\d+(\\.\\d+)?)\\s*(\\w*)$/)\n if (m) {\n rawValue = Number(m[1]) || 0\n const uIndex = unitList.indexOf(m[3])\n rawValue *= uIndex != -1 ? scaleList[uIndex] : 1\n const [u, scale] = selectUnit(units, rawValue)\n const v = rawValue / scale\n formatValue = (digit != undefined ? v.toFixed(digit) : v) + u\n unit = u\n }\n return {\n rawValue: rawValue,\n formatValue: formatValue,\n unit: unit,\n }\n}\n"],"mappings":";AAWA,SAAgB,WAAWA,OAAcC,OAAiC;CACxE,IAAI,IAAI;AACR,QAAO,IAAI,MAAM,QAAQ,IACvB,KAAI,KAAK,IAAI,MAAM,GAAG,GAAG,GAAG,KAAK,IAAI,MAAM,CAAE;AAE/C,QAAO,MAAM,KAAK,IAAI,GAAG,IAAI,EAAE;AAChC;AAED,SAAgB,WACdC,aACAC,OACAC,OAKA;CACA,MAAM,MAAM,YAAY,MAAM;AAC9B,MAAK,gBAAgB,SAAS,UAAU;EACtC,MAAMC,MAAI,IAAI,MAAM,gBAAgB;EACpC,IAAI,IAAI,OAAOA,MAAI,MAAM,IAAI;AAC7B,MAAI,MAAM,EAAE,GAAG,IAAI;AACnB,SAAO;GACL,UAAU;GACV,cAAc,kBAAqB,EAAE,QAAQ,MAAM,GAAG,MAAM,SAAS;GACrE,MAAM,SAAS;EAChB;CACF;CAED,MAAM,WAAW,MAAM,IAAI,CAAC,CAAC,GAAG,GAAG,KAAK,EAAE;CAC1C,MAAM,YAAY,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;CAC3C,IAAI,WAAW;CACf,IAAI,OAAO,SAAS;CACpB,IAAI,eACD,kBAAqB,SAAS,QAAQ,MAAM,GAAG,YAAY;CAC9D,MAAM,IAAI,IAAI,MAAM,4BAA4B;AAChD,KAAI,GAAG;AACL,aAAW,OAAO,EAAE,GAAG,IAAI;EAC3B,MAAM,SAAS,SAAS,QAAQ,EAAE,GAAG;AACrC,cAAY,UAAU,KAAK,UAAU,UAAU;EAC/C,MAAM,CAAC,GAAG,MAAM,GAAG,WAAW,OAAO,SAAS;EAC9C,MAAM,IAAI,WAAW;AACrB,iBAAe,kBAAqB,EAAE,QAAQ,MAAM,GAAG,KAAK;AAC5D,SAAO;CACR;AACD,QAAO;EACK;EACG;EACP;CACP;AACF"}
|
package/dist/Slider/type.cjs
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
//#region src/math.ts
|
|
3
|
-
/**
|
|
4
|
-
*
|
|
5
|
-
* @category Math
|
|
6
|
-
*/
|
|
7
|
-
function toFixed(x, fractionDigits) {
|
|
8
|
-
return Number(x.toFixed(fractionDigits));
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
*
|
|
12
|
-
* @category Math
|
|
13
|
-
*/
|
|
14
|
-
function decimalPart(x) {
|
|
15
|
-
return String(x).split(".")[1];
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
//#endregion
|
|
19
|
-
//#region src/components/Slider/type.ts
|
|
20
|
-
function generateOptionsList(options, min, max, step) {
|
|
21
|
-
const optionsList = [];
|
|
22
|
-
const per = options[0] == "step" ? step : options[0];
|
|
23
|
-
const count = Math.floor(max / per) - Math.ceil(min / per) + 1;
|
|
24
|
-
for (let i = 0; i < count; i++) {
|
|
25
|
-
const value = toFixed(per * (Math.ceil(min / per) + i), decimalPart(per)?.length);
|
|
26
|
-
optionsList.push({
|
|
27
|
-
value,
|
|
28
|
-
type: options[1]
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
return optionsList;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
//#endregion
|
|
35
|
-
exports.generateOptionsList = generateOptionsList;
|
|
36
|
-
//# sourceMappingURL=type.cjs.map
|
package/dist/Slider/type.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"type.cjs","names":["x: number","fractionDigits?: number","x: number | string","options: ScaleOptions","min: number","max: number","step: number","optionsList: {\n value: number\n type: ScaleType\n }[]"],"sources":["../../src/math.ts","../../src/components/Slider/type.ts"],"sourcesContent":["/**\n * clamp value between min and max\n * @category Math\n */\nexport function clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(value, max))\n}\n\n/**\n * Normalize the value from 0 to 1\n * @category Math\n */\nexport function normalizeValue(\n rawValue: number,\n min: number,\n max: number,\n skew = 1,\n) {\n if (min >= max) throw new RangeError('requirements: min < max')\n const v = clamp((rawValue - min) / (max - min), 0, 1)\n return Math.pow(v, skew)\n}\n\n/**\n * Convert normalized values back to raw values.\n * @category Math\n */\nexport function rawValue(\n normalizedValue: number,\n min: number,\n max: number,\n skew = 1,\n) {\n if (min >= max) throw new RangeError('requirements: min < max')\n const v =\n skew == 1\n ? clamp(normalizedValue, 0, 1)\n : Math.exp(Math.log(clamp(normalizedValue, 0, 1)) / skew)\n return min + v * (max - min)\n}\n\n/**\n *\n * @category Math\n */\nexport function skewWithCenterValue(\n centerValue: number,\n min: number,\n max: number,\n) {\n if (!(min <= centerValue && centerValue <= max))\n throw new RangeError('requirements: min <= centerValue <= max')\n return Math.log(0.5) / Math.log((centerValue - min) / (max - min))\n}\n\n/**\n *\n * @category Math\n */\nexport function stepValue(value: number, step: number) {\n if (step <= 0) throw new RangeError('requirements: step > 0')\n const quotient = Math.floor(value / step)\n const decimalDigits = decimalPart(step)?.length\n const v = toFixed(quotient * step, decimalDigits)\n const next = toFixed((quotient + 1) * step, decimalDigits)\n return Math.abs(value - v) < Math.abs(value - next) ? v : next\n}\n\n/**\n *\n * @category Math\n */\nexport function toFixed(x: number, fractionDigits?: number) {\n return Number(x.toFixed(fractionDigits))\n}\n\n/**\n *\n * @category Math\n */\nexport function integerPart(x: number | string): string | undefined {\n if (Number.isNaN(x)) {\n return undefined\n }\n return String(x).split('.')[0]\n}\n\n/**\n *\n * @category Math\n */\nexport function decimalPart(x: number | string): string | undefined {\n return String(x).split('.')[1]\n}\n\n/**\n *\n * @category Math\n */\nexport function radian(degree: number) {\n return (Math.PI * degree) / 180\n}\n\n/**\n *\n * @category Math\n */\nexport function degree(radian: number) {\n return (180 * radian) / Math.PI\n}\n\n/**\n *\n * @category Math\n */\nexport function mapValue(\n value: number,\n inMin: number,\n inMax: number,\n outMin: number,\n outMax: number,\n) {\n return ((value - inMin) / (inMax - inMin)) * (outMax - outMin) + outMin\n}\n\n/**\n *\n * @category Math\n */\nexport function dbToGain(db: number) {\n return Math.pow(10, db / 20)\n}\n\n/**\n *\n * @category Math\n */\nexport function gainToDb(gain: number) {\n return 20 * (Math.log(gain) / Math.LN10)\n}\n","/**\n * @module Slider\n */\n\nimport { decimalPart, toFixed } from '../../math'\n\nexport type ScaleType = 'mark' | 'mark-number' | 'number'\nexport type ScaleOptions = ['step', ScaleType] | [number, ScaleType]\n\nexport function generateOptionsList(\n options: ScaleOptions,\n min: number,\n max: number,\n step: number,\n) {\n const optionsList: {\n value: number\n type: ScaleType\n }[] = []\n const per = options[0] == 'step' ? step : options[0]\n const count = Math.floor(max / per) - Math.ceil(min / per) + 1\n for (let i = 0; i < count; i++) {\n const value = toFixed(\n per * (Math.ceil(min / per) + i),\n decimalPart(per)?.length,\n )\n optionsList.push({ value: value, type: options[1] })\n }\n return optionsList\n}\n"],"mappings":";;;;;;AAwEA,SAAgB,QAAQA,GAAWC,gBAAyB;AAC1D,QAAO,OAAO,EAAE,QAAQ,eAAe,CAAC;AACzC;;;;;AAiBD,SAAgB,YAAYC,GAAwC;AAClE,QAAO,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC;AAC7B;;;;ACpFD,SAAgB,oBACdC,SACAC,KACAC,KACAC,MACA;CACA,MAAMC,cAGA,CAAE;CACR,MAAM,MAAM,QAAQ,MAAM,SAAS,OAAO,QAAQ;CAClD,MAAM,QAAQ,KAAK,MAAM,MAAM,IAAI,GAAG,KAAK,KAAK,MAAM,IAAI,GAAG;AAC7D,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KAAK;EAC9B,MAAM,QAAQ,QACZ,OAAO,KAAK,KAAK,MAAM,IAAI,GAAG,IAC9B,YAAY,IAAI,EAAE,OACnB;AACD,cAAY,KAAK;GAAS;GAAO,MAAM,QAAQ;EAAI,EAAC;CACrD;AACD,QAAO;AACR"}
|
package/dist/Slider/type.d.cts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
//#region src/components/Slider/type.d.ts
|
|
2
|
-
/**
|
|
3
|
-
* @module Slider
|
|
4
|
-
*/
|
|
5
|
-
type ScaleType = 'mark' | 'mark-number' | 'number';
|
|
6
|
-
type ScaleOptions = ['step', ScaleType] | [number, ScaleType];
|
|
7
|
-
declare function generateOptionsList(options: ScaleOptions, min: number, max: number, step: number): {
|
|
8
|
-
value: number;
|
|
9
|
-
type: ScaleType;
|
|
10
|
-
}[];
|
|
11
|
-
//# sourceMappingURL=type.d.ts.map
|
|
12
|
-
|
|
13
|
-
//#endregion
|
|
14
|
-
export { ScaleOptions, ScaleType, generateOptionsList };
|
|
15
|
-
//# sourceMappingURL=type.d.cts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"type.d.cts","names":[],"sources":["../../../src/components/Slider/type.ts"],"sourcesContent":[],"mappings":";;AAMA;AACA;AAAwB,KADZ,SAAA,GACY,MAAA,GAAA,aAAA,GAAA,QAAA;AAAY,KAAxB,YAAA,GAAwB,CAAA,MAAA,EAAA,SAAA,CAAA,GAAA,CAAA,MAAA,EAAsB,SAAtB,CAAA;AAAsB,iBAE1C,mBAAA,CAF0C,OAAA,EAG/C,YAH+C,EAAA,GAAA,EAAA,MAAA,EAAA,GAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,CAAA,EAAA;EAAS,KAAA,EAAA,MAAA;EAEnD,IAAA,EAQN,SARM;CAAmB,EAAA"}
|
package/dist/Slider/type.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
//#region src/components/Slider/type.d.ts
|
|
2
|
-
/**
|
|
3
|
-
* @module Slider
|
|
4
|
-
*/
|
|
5
|
-
type ScaleType = 'mark' | 'mark-number' | 'number';
|
|
6
|
-
type ScaleOptions = ['step', ScaleType] | [number, ScaleType];
|
|
7
|
-
declare function generateOptionsList(options: ScaleOptions, min: number, max: number, step: number): {
|
|
8
|
-
value: number;
|
|
9
|
-
type: ScaleType;
|
|
10
|
-
}[];
|
|
11
|
-
//# sourceMappingURL=type.d.ts.map
|
|
12
|
-
|
|
13
|
-
//#endregion
|
|
14
|
-
export { ScaleOptions, ScaleType, generateOptionsList };
|
|
15
|
-
//# sourceMappingURL=type.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"type.d.ts","names":[],"sources":["../../../src/components/Slider/type.ts"],"sourcesContent":[],"mappings":";;AAMA;AACA;AAAwB,KADZ,SAAA,GACY,MAAA,GAAA,aAAA,GAAA,QAAA;AAAY,KAAxB,YAAA,GAAwB,CAAA,MAAA,EAAA,SAAA,CAAA,GAAA,CAAA,MAAA,EAAsB,SAAtB,CAAA;AAAsB,iBAE1C,mBAAA,CAF0C,OAAA,EAG/C,YAH+C,EAAA,GAAA,EAAA,MAAA,EAAA,GAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,CAAA,EAAA;EAAS,KAAA,EAAA,MAAA;EAEnD,IAAA,EAQN,SARM;CAAmB,EAAA"}
|
package/dist/Slider/type.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
//#region src/math.ts
|
|
2
|
-
/**
|
|
3
|
-
*
|
|
4
|
-
* @category Math
|
|
5
|
-
*/
|
|
6
|
-
function toFixed(x, fractionDigits) {
|
|
7
|
-
return Number(x.toFixed(fractionDigits));
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
*
|
|
11
|
-
* @category Math
|
|
12
|
-
*/
|
|
13
|
-
function decimalPart(x) {
|
|
14
|
-
return String(x).split(".")[1];
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
//#endregion
|
|
18
|
-
//#region src/components/Slider/type.ts
|
|
19
|
-
function generateOptionsList(options, min, max, step) {
|
|
20
|
-
const optionsList = [];
|
|
21
|
-
const per = options[0] == "step" ? step : options[0];
|
|
22
|
-
const count = Math.floor(max / per) - Math.ceil(min / per) + 1;
|
|
23
|
-
for (let i = 0; i < count; i++) {
|
|
24
|
-
const value = toFixed(per * (Math.ceil(min / per) + i), decimalPart(per)?.length);
|
|
25
|
-
optionsList.push({
|
|
26
|
-
value,
|
|
27
|
-
type: options[1]
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
return optionsList;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
//#endregion
|
|
34
|
-
export { generateOptionsList };
|
|
35
|
-
//# sourceMappingURL=type.js.map
|
package/dist/Slider/type.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"type.js","names":["x: number","fractionDigits?: number","x: number | string","options: ScaleOptions","min: number","max: number","step: number","optionsList: {\n value: number\n type: ScaleType\n }[]"],"sources":["../../src/math.ts","../../src/components/Slider/type.ts"],"sourcesContent":["/**\n * clamp value between min and max\n * @category Math\n */\nexport function clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(value, max))\n}\n\n/**\n * Normalize the value from 0 to 1\n * @category Math\n */\nexport function normalizeValue(\n rawValue: number,\n min: number,\n max: number,\n skew = 1,\n) {\n if (min >= max) throw new RangeError('requirements: min < max')\n const v = clamp((rawValue - min) / (max - min), 0, 1)\n return Math.pow(v, skew)\n}\n\n/**\n * Convert normalized values back to raw values.\n * @category Math\n */\nexport function rawValue(\n normalizedValue: number,\n min: number,\n max: number,\n skew = 1,\n) {\n if (min >= max) throw new RangeError('requirements: min < max')\n const v =\n skew == 1\n ? clamp(normalizedValue, 0, 1)\n : Math.exp(Math.log(clamp(normalizedValue, 0, 1)) / skew)\n return min + v * (max - min)\n}\n\n/**\n *\n * @category Math\n */\nexport function skewWithCenterValue(\n centerValue: number,\n min: number,\n max: number,\n) {\n if (!(min <= centerValue && centerValue <= max))\n throw new RangeError('requirements: min <= centerValue <= max')\n return Math.log(0.5) / Math.log((centerValue - min) / (max - min))\n}\n\n/**\n *\n * @category Math\n */\nexport function stepValue(value: number, step: number) {\n if (step <= 0) throw new RangeError('requirements: step > 0')\n const quotient = Math.floor(value / step)\n const decimalDigits = decimalPart(step)?.length\n const v = toFixed(quotient * step, decimalDigits)\n const next = toFixed((quotient + 1) * step, decimalDigits)\n return Math.abs(value - v) < Math.abs(value - next) ? v : next\n}\n\n/**\n *\n * @category Math\n */\nexport function toFixed(x: number, fractionDigits?: number) {\n return Number(x.toFixed(fractionDigits))\n}\n\n/**\n *\n * @category Math\n */\nexport function integerPart(x: number | string): string | undefined {\n if (Number.isNaN(x)) {\n return undefined\n }\n return String(x).split('.')[0]\n}\n\n/**\n *\n * @category Math\n */\nexport function decimalPart(x: number | string): string | undefined {\n return String(x).split('.')[1]\n}\n\n/**\n *\n * @category Math\n */\nexport function radian(degree: number) {\n return (Math.PI * degree) / 180\n}\n\n/**\n *\n * @category Math\n */\nexport function degree(radian: number) {\n return (180 * radian) / Math.PI\n}\n\n/**\n *\n * @category Math\n */\nexport function mapValue(\n value: number,\n inMin: number,\n inMax: number,\n outMin: number,\n outMax: number,\n) {\n return ((value - inMin) / (inMax - inMin)) * (outMax - outMin) + outMin\n}\n\n/**\n *\n * @category Math\n */\nexport function dbToGain(db: number) {\n return Math.pow(10, db / 20)\n}\n\n/**\n *\n * @category Math\n */\nexport function gainToDb(gain: number) {\n return 20 * (Math.log(gain) / Math.LN10)\n}\n","/**\n * @module Slider\n */\n\nimport { decimalPart, toFixed } from '../../math'\n\nexport type ScaleType = 'mark' | 'mark-number' | 'number'\nexport type ScaleOptions = ['step', ScaleType] | [number, ScaleType]\n\nexport function generateOptionsList(\n options: ScaleOptions,\n min: number,\n max: number,\n step: number,\n) {\n const optionsList: {\n value: number\n type: ScaleType\n }[] = []\n const per = options[0] == 'step' ? step : options[0]\n const count = Math.floor(max / per) - Math.ceil(min / per) + 1\n for (let i = 0; i < count; i++) {\n const value = toFixed(\n per * (Math.ceil(min / per) + i),\n decimalPart(per)?.length,\n )\n optionsList.push({ value: value, type: options[1] })\n }\n return optionsList\n}\n"],"mappings":";;;;;AAwEA,SAAgB,QAAQA,GAAWC,gBAAyB;AAC1D,QAAO,OAAO,EAAE,QAAQ,eAAe,CAAC;AACzC;;;;;AAiBD,SAAgB,YAAYC,GAAwC;AAClE,QAAO,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC;AAC7B;;;;ACpFD,SAAgB,oBACdC,SACAC,KACAC,KACAC,MACA;CACA,MAAMC,cAGA,CAAE;CACR,MAAM,MAAM,QAAQ,MAAM,SAAS,OAAO,QAAQ;CAClD,MAAM,QAAQ,KAAK,MAAM,MAAM,IAAI,GAAG,KAAK,KAAK,MAAM,IAAI,GAAG;AAC7D,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KAAK;EAC9B,MAAM,QAAQ,QACZ,OAAO,KAAK,KAAK,MAAM,IAAI,GAAG,IAC9B,YAAY,IAAI,EAAE,OACnB;AACD,cAAY,KAAK;GAAS;GAAO,MAAM,QAAQ;EAAI,EAAC;CACrD;AACD,QAAO;AACR"}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module NumberInput
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* [unit, scale][]
|
|
7
|
-
* @example
|
|
8
|
-
* [['Hz', 1], ['kHz', 1000]]
|
|
9
|
-
*/
|
|
10
|
-
export type Units = [string, number][]
|
|
11
|
-
|
|
12
|
-
export function selectUnit(units: Units, value: number): [string, number] {
|
|
13
|
-
let i = 0
|
|
14
|
-
for (; i < units.length; i++) {
|
|
15
|
-
if (Math.abs(units[i][1]) > Math.abs(value)) break
|
|
16
|
-
}
|
|
17
|
-
return units[Math.max(0, i - 1)]
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export function parseValue(
|
|
21
|
-
inputString: string,
|
|
22
|
-
units?: string | Units,
|
|
23
|
-
digit?: number,
|
|
24
|
-
): {
|
|
25
|
-
rawValue: number
|
|
26
|
-
formatValue: string
|
|
27
|
-
unit: string
|
|
28
|
-
} {
|
|
29
|
-
const str = inputString.trim()
|
|
30
|
-
if (!units || typeof units == 'string') {
|
|
31
|
-
const m = str.match(/-?\d+(\.\d+)?/)
|
|
32
|
-
let v = Number(m?.[0] ?? '0')
|
|
33
|
-
v = isNaN(v) ? 0 : v
|
|
34
|
-
return {
|
|
35
|
-
rawValue: v,
|
|
36
|
-
formatValue: (digit != undefined ? v.toFixed(digit) : v) + (units ?? ''),
|
|
37
|
-
unit: units ?? '',
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const unitList = units.map(([u, _s]) => u)
|
|
42
|
-
const scaleList = units.map(([_u, s]) => s)
|
|
43
|
-
let rawValue = 0
|
|
44
|
-
let unit = unitList[0]
|
|
45
|
-
let formatValue =
|
|
46
|
-
(digit != undefined ? rawValue.toFixed(digit) : rawValue) + unit
|
|
47
|
-
const m = str.match(/^(-?\d+(\.\d+)?)\s*(\w*)$/)
|
|
48
|
-
if (m) {
|
|
49
|
-
rawValue = Number(m[1]) || 0
|
|
50
|
-
const uIndex = unitList.indexOf(m[3])
|
|
51
|
-
rawValue *= uIndex != -1 ? scaleList[uIndex] : 1
|
|
52
|
-
const [u, scale] = selectUnit(units, rawValue)
|
|
53
|
-
const v = rawValue / scale
|
|
54
|
-
formatValue = (digit != undefined ? v.toFixed(digit) : v) + u
|
|
55
|
-
unit = u
|
|
56
|
-
}
|
|
57
|
-
return {
|
|
58
|
-
rawValue: rawValue,
|
|
59
|
-
formatValue: formatValue,
|
|
60
|
-
unit: unit,
|
|
61
|
-
}
|
|
62
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module Slider
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { decimalPart, toFixed } from '../../math'
|
|
6
|
-
|
|
7
|
-
export type ScaleType = 'mark' | 'mark-number' | 'number'
|
|
8
|
-
export type ScaleOptions = ['step', ScaleType] | [number, ScaleType]
|
|
9
|
-
|
|
10
|
-
export function generateOptionsList(
|
|
11
|
-
options: ScaleOptions,
|
|
12
|
-
min: number,
|
|
13
|
-
max: number,
|
|
14
|
-
step: number,
|
|
15
|
-
) {
|
|
16
|
-
const optionsList: {
|
|
17
|
-
value: number
|
|
18
|
-
type: ScaleType
|
|
19
|
-
}[] = []
|
|
20
|
-
const per = options[0] == 'step' ? step : options[0]
|
|
21
|
-
const count = Math.floor(max / per) - Math.ceil(min / per) + 1
|
|
22
|
-
for (let i = 0; i < count; i++) {
|
|
23
|
-
const value = toFixed(
|
|
24
|
-
per * (Math.ceil(min / per) + i),
|
|
25
|
-
decimalPart(per)?.length,
|
|
26
|
-
)
|
|
27
|
-
optionsList.push({ value: value, type: options[1] })
|
|
28
|
-
}
|
|
29
|
-
return optionsList
|
|
30
|
-
}
|