UNPKG

@solid-aria/toggle

Version:

Primitives for building toggle components like checkboxes and switches.

112 lines (107 loc) 3.69 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.ts var src_exports = {}; __export(src_exports, { createToggle: () => createToggle, createToggleState: () => createToggleState }); module.exports = __toCommonJS(src_exports); // src/createToggle.ts var import_focus = require("@solid-aria/focus"); var import_interactions = require("@solid-aria/interactions"); var import_utils3 = require("@solid-aria/utils"); var import_props = require("@solid-primitives/props"); var import_solid_js = require("solid-js"); // src/createToggleState.ts var import_utils = require("@solid-aria/utils"); var import_utils2 = require("@solid-primitives/utils"); function createToggleState(props = {}) { const [isSelected, _setSelected] = (0, import_utils.createControllableBooleanSignal)({ value: () => (0, import_utils2.access)(props.isSelected), defaultValue: () => !!(0, import_utils2.access)(props.defaultSelected), onChange: props.onChange }); const setSelected = (value) => { if (!(0, import_utils2.access)(props.isReadOnly)) { _setSelected(value); } }; const toggle = () => { if (!(0, import_utils2.access)(props.isReadOnly)) { _setSelected(!isSelected()); } }; return { isSelected, setSelected, toggle }; } // src/createToggle.ts function createToggle(props, inputRef) { const defaultProps = { isDisabled: false, validationState: "valid" }; props = (0, import_solid_js.mergeProps)(defaultProps, props); const state = createToggleState(props); const onChange = (event) => { event.stopPropagation(); const target = event.target; state.setSelected(target.checked); target.checked = state.isSelected(); }; const { pressProps } = (0, import_interactions.createPress)({ isDisabled: () => props.isDisabled }); const { focusableProps } = (0, import_focus.createFocusable)(props, inputRef); const domProps = (0, import_solid_js.mergeProps)((0, import_solid_js.createMemo)(() => (0, import_utils3.filterDOMProps)(props, { labelable: true }))); const baseToggleProps = { type: "checkbox", get "aria-invalid"() { return props.validationState === "invalid" || void 0; }, get "aria-errormessage"() { return props["aria-errormessage"]; }, get "aria-controls"() { return props["aria-controls"]; }, get "aria-readonly"() { return props.isReadOnly || void 0; }, get "aria-required"() { return props.isRequired || void 0; }, get disabled() { return props.isDisabled; }, get value() { return props.value; }, get name() { return props.name; }, onChange }; const inputProps = (0, import_props.combineProps)(domProps, baseToggleProps, pressProps, focusableProps); return { inputProps, state }; } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { createToggle, createToggleState });