@solid-aria/toggle
Version:
Primitives for building toggle components like checkboxes and switches.
112 lines (107 loc) • 3.69 kB
JavaScript
;
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
});