{"record":{"id":"c2efb3604c5500d8","repo":"Dogfalo/materialize","slug":"nouislider-limit-option-is-only-supported-on-li","errorCode":null,"errorMessage":"noUiSlider: 'limit' option is only supported on linear sliders with 2 or more handles.","messagePattern":"noUiSlider: 'limit' option is only supported on linear sliders with 2 or more handles\\.","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"extras/noUiSlider/nouislider.js","lineNumber":620,"sourceCode":"        }\n\n        parsed.margin = parsed.spectrum.getMargin(entry);\n\n        if ( !parsed.margin ) {\n            throw new Error(\"noUiSlider: 'margin' option is only supported on linear sliders.\");\n        }\n    }\n\n    function testLimit ( parsed, entry ) {\n\n        if ( !isNumeric(entry) ){\n            throw new Error(\"noUiSlider: 'limit' option must be numeric.\");\n        }\n\n        parsed.limit = parsed.spectrum.getMargin(entry);\n\n        if ( !parsed.limit || parsed.handles < 2 ) {\n            throw new Error(\"noUiSlider: 'limit' option is only supported on linear sliders with 2 or more handles.\");\n        }\n    }\n\n    function testPadding ( parsed, entry ) {\n\n        if ( !isNumeric(entry) ){\n            throw new Error(\"noUiSlider: 'padding' option must be numeric.\");\n        }\n\n        if ( entry === 0 ) {\n            return;\n        }\n\n        parsed.padding = parsed.spectrum.getMargin(entry);\n\n        if ( !parsed.padding ) {\n            throw new Error(\"noUiSlider: 'padding' option is only supported on linear sliders.\");\n        }","sourceCodeStart":602,"sourceCodeEnd":638,"githubUrl":"https://github.com/Dogfalo/materialize/blob/824e78248b3de81e383445e76ffb04cc3264fe7d/extras/noUiSlider/nouislider.js#L602-L638","documentation":"Thrown by testLimit when getMargin returns false (non-linear range) OR parsed.handles < 2. limit only constrains the maximum gap between handles, so it requires at least two handles AND a linear range; failing either condition triggers this combined message.","triggerScenarios":"Single handle: start: [50], limit: 20. Non-linear range: range: { min: 0, '50%': 50, max: 100 }, start: [10, 90], limit: 40.","commonSituations":"Setting limit on a one-handle slider, or switching the range to a stepped scale while leaving limit in place.","solutions":["Ensure at least two start values and a linear range.","Remove limit for single-handle sliders.","Remove intermediate stops from range so getMargin returns a real value."],"exampleFix":"// before\nstart: [50], limit: 20\n// after\nstart: [50]   // limit removed","handlingStrategy":"validation","validationCode":"const handles = (Array.isArray(opts.start) ? opts.start : [opts.start]).length;\nfunction isLinearRange(range) { return Object.keys(range).length === 2 && 'min' in range && 'max' in range; }\nif (opts.limit != null && (handles < 2 || !isLinearRange(opts.range))) {\n  throw new Error('limit requires >= 2 handles and a linear range');\n}","typeGuard":null,"tryCatchPattern":"try { noUiSlider.create(el, opts); }\ncatch (e) { if (/limit' option is only supported/.test(e.message)) { delete opts.limit; /* retry */ } else throw e; }","preventionTips":["Only set limit on multi-handle, linear-range sliders.","Drop limit when you reduce to one handle or add intermediate stops.","Recompute constraint validity whenever start or range changes."],"tags":["config","validation","limit","handles","linear-range"],"backgroundTag":null,"analyzedSha":"824e78248b3de81e383445e76ffb04cc3264fe7d","analyzedAt":"2026-08-13T04:14:22.506Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}