UNPKG

lisn.js

Version:

Simply handle user gestures and actions. Includes widgets.

1 lines 13.2 kB
{"version":3,"file":"layout.cjs","names":["MH","_interopRequireWildcard","require","_errors","_settings","_math","_validation","_bitSpaces","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","isValidDevice","device","ORDERED_DEVICES","exports","isValidAspectRatio","aspectRatio","ORDERED_ASPECTR","isValidDeviceList","isValidForType","S_DEVICES","isValidAspectRatioList","aspectR","S_ASPECTRS_CAMEL","getOtherDevices","getOtherLayouts","getOtherAspectRatios","getLayoutBitmask","options","layoutBitmask","getBitmaskFromSpec","devices","aspectRatios","bitmask","ORDERED_DEVICE_NAMES","sortedKeysByVal","settings","deviceBreakpoints","ORDERED_ASPECTR_NAMES","aspectRatioBreakpoints","bitSpaces","newBitSpaces","createBitSpace","NUM_LAYOUTS","lengthOf","LAYOUT_RANGE_REGEX","RegExp","getLayoutsFromBitmask","keyName","bitSpace","layouts","bit","start","end","value","name","nameOf","push","spec","oppositeBitmask","err","isInstanceOf","LisnUsageError","isEmpty","singleKeyName","slice","isString","rangeMatch","match","minLayout","maxLayout","undefined","usageError","bitmaskFor","validateStrList","lt"],"sources":["../../../src/ts/utils/layout.ts"],"sourcesContent":["/**\n * @module Utils\n */\n\nimport * as MH from \"@lisn/globals/minification-helpers\";\n\nimport { LisnUsageError } from \"@lisn/globals/errors\";\nimport { settings } from \"@lisn/globals/settings\";\n\nimport {\n DeviceSpec,\n Device,\n AspectRatioSpec,\n AspectRatio,\n} from \"@lisn/globals/types\";\n\nimport { sortedKeysByVal } from \"@lisn/utils/math\";\nimport { validateStrList } from \"@lisn/utils/validation\";\n\nimport {\n BitSpace,\n newBitSpaces,\n createBitSpace,\n} from \"@lisn/modules/bit-spaces\";\n\n/**\n * Returns true if the given string is a valid device name.\n *\n * @category Validation\n */\nexport const isValidDevice = (device: string): device is Device =>\n ORDERED_DEVICES.has(device);\n\n/**\n * Returns true if the given string is a valid aspect ratio name.\n *\n * @category Validation\n */\nexport const isValidAspectRatio = (\n aspectRatio: string,\n): aspectRatio is AspectRatio => ORDERED_ASPECTR.has(aspectRatio);\n\n/**\n * Returns true if the given string is a valid device specification (including\n * `\"min <Device>\"`, etc).\n *\n * Returns false for \"\", although if you passed \"\" in\n * {@link Watchers/LayoutWatcher.OnLayoutOptions | OnLayoutOptions} it would\n * accept it as specifying _all_ devices.\n *\n * @category Validation\n */\nexport const isValidDeviceList = (\n device: string | string[],\n): device is DeviceSpec | Device[] =>\n isValidForType(S_DEVICES, device, ORDERED_DEVICES);\n\n/**\n * Returns true if the given string is a valid aspect ratio specification\n * (including `\"min <AspectRatio>\"`, etc).\n *\n * Returns false for \"\", although if you passed \"\" in\n * {@link Watchers/LayoutWatcher.OnLayoutOptions | OnLayoutOptions} it would\n * accept it as specifying _all_ aspect ratios.\n *\n * @category Validation\n */\nexport const isValidAspectRatioList = (\n aspectR: string | string[],\n): aspectR is AspectRatioSpec | AspectRatio[] =>\n isValidForType(S_ASPECTRS_CAMEL, aspectR, ORDERED_ASPECTR);\n\n/**\n * Returns a list of {@link Device}s that are not covered by the given device\n * specification. See\n * {@link Watchers/LayoutWatcher.OnLayoutOptions | OnLayoutOptions} for accepted\n * formats.\n *\n * Returns an empty for \"\" or for a specification that includes all devices.\n *\n * @category Layout\n */\nexport const getOtherDevices = (device: DeviceSpec | Device[]): Device[] =>\n getOtherLayouts(S_DEVICES, device, ORDERED_DEVICES);\n\n/**\n * Returns a list of {@link AspectRatio}s that are not covered by the given\n * aspect ratio specification. See\n * {@link Watchers/LayoutWatcher.OnLayoutOptions | OnLayoutOptions} for accepted\n * formats.\n *\n * Returns an empty for \"\" or for a specification that includes all aspect\n * ratios.\n *\n * @category Layout\n */\nexport const getOtherAspectRatios = (\n aspectR: AspectRatioSpec | AspectRatio[],\n): AspectRatio[] => getOtherLayouts(S_ASPECTRS_CAMEL, aspectR, ORDERED_ASPECTR);\n\n/**\n * @ignore\n * @internal\n */\nexport const getLayoutBitmask = (options?: {\n devices?: DeviceSpec | Device[];\n aspectRatios?: AspectRatioSpec | AspectRatio[];\n}): number => {\n let layoutBitmask =\n getBitmaskFromSpec(S_DEVICES, options?.devices, ORDERED_DEVICES) |\n getBitmaskFromSpec(\n S_ASPECTRS_CAMEL,\n options?.aspectRatios,\n ORDERED_ASPECTR,\n );\n\n if (!layoutBitmask) {\n layoutBitmask = ORDERED_DEVICES.bitmask | ORDERED_ASPECTR.bitmask; // default: all\n }\n\n return layoutBitmask;\n};\n\n// In ascending order by width.\nconst ORDERED_DEVICE_NAMES = sortedKeysByVal(settings.deviceBreakpoints);\nconst ORDERED_ASPECTR_NAMES = sortedKeysByVal(settings.aspectRatioBreakpoints);\n\nconst bitSpaces = newBitSpaces();\n\n/**\n * @ignore\n * @internal\n */\nexport const ORDERED_DEVICES = createBitSpace(\n bitSpaces,\n ...ORDERED_DEVICE_NAMES,\n);\n\n/**\n * @ignore\n * @internal\n */\nexport const ORDERED_ASPECTR = createBitSpace(\n bitSpaces,\n ...ORDERED_ASPECTR_NAMES,\n);\n\n/**\n * @ignore\n * @internal\n */\nexport const NUM_LAYOUTS =\n MH.lengthOf(ORDERED_DEVICE_NAMES) + MH.lengthOf(ORDERED_ASPECTR_NAMES);\n\n// --------------------\n\nconst S_DEVICES = \"devices\";\nconst S_ASPECTRS_CAMEL = \"aspectRatios\";\n\n// Don't use capture groups for old browser support\nconst LAYOUT_RANGE_REGEX = RegExp(\n \"^ *(?:\" +\n \"([a-z-]+) +to +([a-z-]+)|\" +\n \"min +([a-z-]+)|\" +\n \"max +([a-z-]+)\" +\n \") *$\",\n);\n\nconst getLayoutsFromBitmask = <T extends Device | AspectRatio>(\n keyName: string,\n bitmask: number,\n bitSpace: BitSpace<T>,\n): T[] => {\n const layouts: T[] = [];\n for (let bit = bitSpace.start; bit <= bitSpace.end; bit++) {\n const value = 1 << bit;\n if (bitmask & value) {\n const name = bitSpace.nameOf(value);\n if (name) {\n layouts.push(name);\n }\n }\n }\n\n return layouts;\n};\n\nconst getOtherLayouts = <T extends Device | AspectRatio>(\n keyName: string,\n spec: string | string[],\n bitSpace: BitSpace<T>,\n): T[] => {\n const bitmask = getBitmaskFromSpec(keyName, spec, bitSpace);\n if (!bitmask) {\n return [];\n }\n\n const oppositeBitmask = bitSpace.bitmask & ~bitmask;\n return getLayoutsFromBitmask(keyName, oppositeBitmask, bitSpace);\n};\n\nconst isValidForType = <T extends Device | AspectRatio>(\n keyName: string,\n spec: string | string[],\n bitSpace: BitSpace<T>,\n): boolean => {\n try {\n const bitmask = getBitmaskFromSpec(keyName, spec, bitSpace);\n return bitmask !== 0;\n } catch (err) {\n if (MH.isInstanceOf(err, LisnUsageError)) {\n return false;\n }\n throw err;\n }\n};\n\nconst getBitmaskFromSpec = <T extends Device | AspectRatio>(\n keyName: string,\n spec: string | string[] | undefined | null,\n bitSpace: BitSpace<T>,\n): number => {\n if (MH.isEmpty(spec)) {\n return 0;\n }\n const singleKeyName = keyName.slice(0, -1);\n\n if (MH.isString(spec)) {\n const rangeMatch = spec.match(LAYOUT_RANGE_REGEX);\n if (rangeMatch) {\n const minLayout = rangeMatch[1] || rangeMatch[3];\n const maxLayout = rangeMatch[2] || rangeMatch[4];\n\n if (minLayout !== undefined && !bitSpace.has(minLayout)) {\n throw MH.usageError(`Unknown ${singleKeyName} '${minLayout}'`);\n }\n\n if (maxLayout !== undefined && !bitSpace.has(maxLayout)) {\n throw MH.usageError(`Unknown ${singleKeyName} '${maxLayout}'`);\n }\n\n return bitSpace.bitmaskFor(minLayout, maxLayout);\n }\n }\n\n let bitmask = 0;\n const layouts = validateStrList(keyName, spec, bitSpace.has);\n if (layouts) {\n for (const lt of layouts) {\n bitmask |= bitSpace.bit[lt];\n }\n }\n\n return bitmask;\n};\n"],"mappings":"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","ignoreList":[]}