@ladder-ui/checkbox 0.4.0 → 0.5.0

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/checkbox.css CHANGED
@@ -1,88 +1 @@
1
- @layer components {
2
- .lui-checkbox {
3
- position: relative;
4
- display: inline-flex;
5
- align-items: center;
6
- justify-content: center;
7
- flex-shrink: 0;
8
- vertical-align: middle;
9
- width: var(--lui-checkbox-size-md);
10
- height: var(--lui-checkbox-size-md);
11
- }
12
- .lui-checkbox__input {
13
- position: absolute;
14
- inset: 0;
15
- width: 100%;
16
- height: 100%;
17
- margin: 0;
18
- padding: 0;
19
- opacity: 0;
20
- cursor: pointer;
21
- z-index: 1;
22
- }
23
- .lui-checkbox__input:disabled {
24
- cursor: not-allowed;
25
- }
26
- .lui-checkbox__control {
27
- display: flex;
28
- align-items: center;
29
- justify-content: center;
30
- width: 100%;
31
- height: 100%;
32
- background-color: var(--lui-checkbox-bg);
33
- border: 1px solid var(--lui-checkbox-border);
34
- border-radius: var(--lui-checkbox-radius);
35
- color: var(--lui-checkbox-checked-text);
36
- transition: var(--lui-transition);
37
- pointer-events: none;
38
- flex-shrink: 0;
39
- }
40
- .lui-checkbox__icon {
41
- display: none;
42
- align-items: center;
43
- justify-content: center;
44
- width: 65%;
45
- height: 65%;
46
- }
47
- .lui-checkbox__icon svg {
48
- width: 100%;
49
- height: 100%;
50
- }
51
- .lui-checkbox:has(.lui-checkbox__input:focus-visible) .lui-checkbox__control {
52
- outline: none;
53
- border-color: var(--lui-checkbox-focus-border);
54
- box-shadow: 0 0 0 2px var(--lui-bg-surface), 0 0 0 4px var(--lui-checkbox-focus-ring-color);
55
- }
56
- .lui-checkbox:has(.lui-checkbox__input:checked:not(:indeterminate)) .lui-checkbox__control {
57
- background-color: var(--lui-checkbox-checked-bg);
58
- border-color: var(--lui-checkbox-checked-bg);
59
- }
60
- .lui-checkbox:has(.lui-checkbox__input:checked:not(:indeterminate)) .lui-checkbox__icon--check {
61
- display: flex;
62
- }
63
- .lui-checkbox:has(.lui-checkbox__input:indeterminate) .lui-checkbox__control {
64
- background-color: var(--lui-checkbox-checked-bg);
65
- border-color: var(--lui-checkbox-checked-bg);
66
- }
67
- .lui-checkbox:has(.lui-checkbox__input:indeterminate) .lui-checkbox__icon--indeterminate {
68
- display: flex;
69
- }
70
- .lui-checkbox:has(.lui-checkbox__input:disabled) {
71
- opacity: var(--lui-disabled-opacity);
72
- }
73
- .lui-checkbox--error .lui-checkbox__control {
74
- border-color: var(--lui-error);
75
- }
76
- .lui-checkbox--error:has(.lui-checkbox__input:focus-visible) .lui-checkbox__control {
77
- border-color: var(--lui-error);
78
- box-shadow: 0 0 0 2px var(--lui-bg-surface), 0 0 0 4px color-mix(in srgb, var(--lui-error) 40%, transparent);
79
- }
80
- .lui-checkbox--sm {
81
- width: var(--lui-checkbox-size-sm);
82
- height: var(--lui-checkbox-size-sm);
83
- }
84
- .lui-checkbox--lg {
85
- width: var(--lui-checkbox-size-lg);
86
- height: var(--lui-checkbox-size-lg);
87
- }
88
- }
1
+ @layer components{.lui-checkbox{align-items:center;display:inline-flex;flex-shrink:0;height:var(--lui-checkbox-size-md);justify-content:center;position:relative;vertical-align:middle;width:var(--lui-checkbox-size-md)}.lui-checkbox__input{cursor:pointer;height:100%;inset:0;margin:0;opacity:0;padding:0;position:absolute;width:100%;z-index:1}.lui-checkbox__input:disabled{cursor:not-allowed}.lui-checkbox__control{align-items:center;background-color:var(--lui-checkbox-bg);border:1px solid var(--lui-checkbox-border);border-radius:var(--lui-checkbox-radius);color:var(--lui-checkbox-checked-text);display:flex;flex-shrink:0;height:100%;justify-content:center;pointer-events:none;transition:var(--lui-transition);width:100%}.lui-checkbox__icon{align-items:center;display:none;height:65%;justify-content:center;width:65%}.lui-checkbox__icon svg{height:100%;width:100%}.lui-checkbox:has(.lui-checkbox__input:focus-visible) .lui-checkbox__control{border-color:var(--lui-checkbox-focus-border);box-shadow:0 0 0 2px var(--lui-bg-surface),0 0 0 4px var(--lui-checkbox-focus-ring-color);outline:none}.lui-checkbox:has(.lui-checkbox__input:checked:not(:indeterminate)) .lui-checkbox__control{background-color:var(--lui-checkbox-checked-bg);border-color:var(--lui-checkbox-checked-bg)}.lui-checkbox:has(.lui-checkbox__input:checked:not(:indeterminate)) .lui-checkbox__icon--check{display:flex}.lui-checkbox:has(.lui-checkbox__input:indeterminate) .lui-checkbox__control{background-color:var(--lui-checkbox-checked-bg);border-color:var(--lui-checkbox-checked-bg)}.lui-checkbox:has(.lui-checkbox__input:indeterminate) .lui-checkbox__icon--indeterminate{display:flex}.lui-checkbox:has(.lui-checkbox__input:disabled){opacity:var(--lui-disabled-opacity)}.lui-checkbox--error .lui-checkbox__control{border-color:var(--lui-error)}.lui-checkbox--error:has(.lui-checkbox__input:focus-visible) .lui-checkbox__control{border-color:var(--lui-error);box-shadow:0 0 0 2px var(--lui-bg-surface),0 0 0 4px color-mix(in srgb,var(--lui-error) 40%,transparent)}.lui-checkbox--sm{height:var(--lui-checkbox-size-sm);width:var(--lui-checkbox-size-sm)}.lui-checkbox--lg{height:var(--lui-checkbox-size-lg);width:var(--lui-checkbox-size-lg)}}
@@ -1,17 +1 @@
1
- :root {
2
- /* Sizes */
3
- --lui-checkbox-size-sm: 0.875rem; /* 14px */
4
- --lui-checkbox-size-md: 1rem; /* 16px */
5
- --lui-checkbox-size-lg: 1.25rem; /* 20px */
6
- /* Background & border (unchecked) */
7
- --lui-checkbox-bg: var(--lui-bg-surface);
8
- --lui-checkbox-border: color-mix(in srgb, var(--lui-border-default) 93%, var(--lui-text-primary));
9
- /* Checked & indeterminate */
10
- --lui-checkbox-checked-bg: var(--lui-bg-interactive);
11
- --lui-checkbox-checked-text: var(--lui-text-inverse);
12
- /* Focus ring */
13
- --lui-checkbox-focus-border: var(--lui-bg-interactive);
14
- --lui-checkbox-focus-ring-color: color-mix(in srgb, var(--lui-bg-interactive) 40%, transparent);
15
- /* Shape */
16
- --lui-checkbox-radius: var(--lui-radius-sm);
17
- }
1
+ :root{--lui-checkbox-size-sm:0.875rem;--lui-checkbox-size-md:1rem;--lui-checkbox-size-lg:1.25rem;--lui-checkbox-bg:var(--lui-bg-surface);--lui-checkbox-border:color-mix(in srgb,var(--lui-border-default) 93%,var(--lui-text-primary));--lui-checkbox-checked-bg:var(--lui-bg-interactive);--lui-checkbox-checked-text:var(--lui-text-inverse);--lui-checkbox-focus-border:var(--lui-bg-interactive);--lui-checkbox-focus-ring-color:color-mix(in srgb,var(--lui-bg-interactive) 40%,transparent);--lui-checkbox-radius:var(--lui-radius-sm)}
package/dist/index.js CHANGED
@@ -1,67 +1 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var jsxRuntime = require('react/jsx-runtime');
6
- var core = require('@ladder-ui/core');
7
- var primitives = require('@ladder-ui/primitives');
8
-
9
- // ── Internal SVG icons (no external dependency) ───────────────────────────────
10
- function CheckIcon() {
11
- return (jsxRuntime.jsx("svg", { viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: jsxRuntime.jsx("path", { d: "M2 6 L5 9 L10 3" }) }));
12
- }
13
- function IndeterminateIcon() {
14
- return (jsxRuntime.jsx("svg", { viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", "aria-hidden": "true", children: jsxRuntime.jsx("line", { x1: "2.5", y1: "6", x2: "9.5", y2: "6" }) }));
15
- }
16
- // ── Variants ──────────────────────────────────────────────────────────────────
17
- const checkboxVariants = core.cva({
18
- base: "lui-checkbox",
19
- variants: {
20
- size: {
21
- sm: "lui-checkbox--sm",
22
- md: "lui-checkbox--md",
23
- lg: "lui-checkbox--lg",
24
- },
25
- status: {
26
- default: "",
27
- error: "lui-checkbox--error",
28
- },
29
- disabled: {
30
- true: "lui-checkbox--disabled",
31
- false: "",
32
- },
33
- },
34
- defaultVariants: {
35
- size: "md",
36
- status: "default",
37
- disabled: false,
38
- },
39
- });
40
- // ── Component ─────────────────────────────────────────────────────────────────
41
- /**
42
- * Checkbox — a fully accessible, themeable checkbox.
43
- *
44
- * - Renders a native `<input type="checkbox">` for full browser and AT support.
45
- * - `ref` points directly to the native input element.
46
- * - Supports `indeterminate` state (shows a dash — useful for "select all" patterns).
47
- * - No third-party dependencies — checkmark and dash are inline SVGs.
48
- * - All visual state is driven by CSS `:has()` selectors — zero JS in rendering.
49
- */
50
- function Checkbox({ ref, className, size = "md", status = "default", indeterminate = false, disabled, ...props }) {
51
- const { wrapperProps, inputProps } = primitives.useCheckbox({
52
- ref,
53
- indeterminate,
54
- status,
55
- disabled,
56
- "aria-invalid": props["aria-invalid"],
57
- });
58
- return (jsxRuntime.jsxs("span", { ...wrapperProps, className: checkboxVariants({ size, status, disabled, className }), children: [jsxRuntime.jsx("input", { className: "lui-checkbox__input", ...inputProps, ...props }), jsxRuntime.jsxs("span", { className: "lui-checkbox__control", "aria-hidden": "true", children: [jsxRuntime.jsx("span", { className: "lui-checkbox__icon lui-checkbox__icon--check", children: jsxRuntime.jsx(CheckIcon, {}) }), jsxRuntime.jsx("span", { className: "lui-checkbox__icon lui-checkbox__icon--indeterminate", children: jsxRuntime.jsx(IndeterminateIcon, {}) })] })] }));
59
- }
60
- Checkbox.displayName = "Checkbox";
61
-
62
- Object.defineProperty(exports, "useCheckbox", {
63
- enumerable: true,
64
- get: function () { return primitives.useCheckbox; }
65
- });
66
- exports.Checkbox = Checkbox;
67
- exports.default = Checkbox;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),i=require("@ladder-ui/core"),s=require("@ladder-ui/primitives");function r(){return e.jsx("svg",{viewBox:"0 0 12 12",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:e.jsx("path",{d:"M2 6 L5 9 L10 3"})})}function a(){return e.jsx("svg",{viewBox:"0 0 12 12",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round","aria-hidden":"true",children:e.jsx("line",{x1:"2.5",y1:"6",x2:"9.5",y2:"6"})})}const t=i.cva({base:"lui-checkbox",variants:{size:{sm:"lui-checkbox--sm",md:"lui-checkbox--md",lg:"lui-checkbox--lg"},status:{default:"",error:"lui-checkbox--error"},disabled:{true:"lui-checkbox--disabled",false:""}},defaultVariants:{size:"md",status:"default",disabled:!1}});function c({ref:i,className:c,size:n="md",status:o="default",indeterminate:l=!1,disabled:u,...d}){const{wrapperProps:x,inputProps:h}=s.useCheckbox({ref:i,indeterminate:l,status:o,disabled:u,"aria-invalid":d["aria-invalid"]});return e.jsxs("span",{...x,className:t({size:n,status:o,disabled:u,className:c}),children:[e.jsx("input",{className:"lui-checkbox__input",...h,...d}),e.jsxs("span",{className:"lui-checkbox__control","aria-hidden":"true",children:[e.jsx("span",{className:"lui-checkbox__icon lui-checkbox__icon--check",children:e.jsx(r,{})}),e.jsx("span",{className:"lui-checkbox__icon lui-checkbox__icon--indeterminate",children:e.jsx(a,{})})]})]})}c.displayName="Checkbox",Object.defineProperty(exports,"useCheckbox",{enumerable:!0,get:function(){return s.useCheckbox}}),exports.Checkbox=c,exports.default=c;
package/dist/index.mjs CHANGED
@@ -1,59 +1 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { cva } from '@ladder-ui/core';
3
- import { useCheckbox } from '@ladder-ui/primitives';
4
- export { useCheckbox } from '@ladder-ui/primitives';
5
-
6
- // ── Internal SVG icons (no external dependency) ───────────────────────────────
7
- function CheckIcon() {
8
- return (jsx("svg", { viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: jsx("path", { d: "M2 6 L5 9 L10 3" }) }));
9
- }
10
- function IndeterminateIcon() {
11
- return (jsx("svg", { viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", "aria-hidden": "true", children: jsx("line", { x1: "2.5", y1: "6", x2: "9.5", y2: "6" }) }));
12
- }
13
- // ── Variants ──────────────────────────────────────────────────────────────────
14
- const checkboxVariants = cva({
15
- base: "lui-checkbox",
16
- variants: {
17
- size: {
18
- sm: "lui-checkbox--sm",
19
- md: "lui-checkbox--md",
20
- lg: "lui-checkbox--lg",
21
- },
22
- status: {
23
- default: "",
24
- error: "lui-checkbox--error",
25
- },
26
- disabled: {
27
- true: "lui-checkbox--disabled",
28
- false: "",
29
- },
30
- },
31
- defaultVariants: {
32
- size: "md",
33
- status: "default",
34
- disabled: false,
35
- },
36
- });
37
- // ── Component ─────────────────────────────────────────────────────────────────
38
- /**
39
- * Checkbox — a fully accessible, themeable checkbox.
40
- *
41
- * - Renders a native `<input type="checkbox">` for full browser and AT support.
42
- * - `ref` points directly to the native input element.
43
- * - Supports `indeterminate` state (shows a dash — useful for "select all" patterns).
44
- * - No third-party dependencies — checkmark and dash are inline SVGs.
45
- * - All visual state is driven by CSS `:has()` selectors — zero JS in rendering.
46
- */
47
- function Checkbox({ ref, className, size = "md", status = "default", indeterminate = false, disabled, ...props }) {
48
- const { wrapperProps, inputProps } = useCheckbox({
49
- ref,
50
- indeterminate,
51
- status,
52
- disabled,
53
- "aria-invalid": props["aria-invalid"],
54
- });
55
- return (jsxs("span", { ...wrapperProps, className: checkboxVariants({ size, status, disabled, className }), children: [jsx("input", { className: "lui-checkbox__input", ...inputProps, ...props }), jsxs("span", { className: "lui-checkbox__control", "aria-hidden": "true", children: [jsx("span", { className: "lui-checkbox__icon lui-checkbox__icon--check", children: jsx(CheckIcon, {}) }), jsx("span", { className: "lui-checkbox__icon lui-checkbox__icon--indeterminate", children: jsx(IndeterminateIcon, {}) })] })] }));
56
- }
57
- Checkbox.displayName = "Checkbox";
58
-
59
- export { Checkbox, Checkbox as default };
1
+ import{jsxs as e,jsx as i}from"react/jsx-runtime";import{cva as r}from"@ladder-ui/core";import{useCheckbox as a}from"@ladder-ui/primitives";export{useCheckbox}from"@ladder-ui/primitives";function s(){return i("svg",{viewBox:"0 0 12 12",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:i("path",{d:"M2 6 L5 9 L10 3"})})}function t(){return i("svg",{viewBox:"0 0 12 12",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round","aria-hidden":"true",children:i("line",{x1:"2.5",y1:"6",x2:"9.5",y2:"6"})})}const o=r({base:"lui-checkbox",variants:{size:{sm:"lui-checkbox--sm",md:"lui-checkbox--md",lg:"lui-checkbox--lg"},status:{default:"",error:"lui-checkbox--error"},disabled:{true:"lui-checkbox--disabled",false:""}},defaultVariants:{size:"md",status:"default",disabled:!1}});function c({ref:r,className:c,size:n="md",status:l="default",indeterminate:d=!1,disabled:u,...h}){const{wrapperProps:m,inputProps:k}=a({ref:r,indeterminate:d,status:l,disabled:u,"aria-invalid":h["aria-invalid"]});return e("span",{...m,className:o({size:n,status:l,disabled:u,className:c}),children:[i("input",{className:"lui-checkbox__input",...k,...h}),e("span",{className:"lui-checkbox__control","aria-hidden":"true",children:[i("span",{className:"lui-checkbox__icon lui-checkbox__icon--check",children:i(s,{})}),i("span",{className:"lui-checkbox__icon lui-checkbox__icon--indeterminate",children:i(t,{})})]})]})}c.displayName="Checkbox";export{c as Checkbox,c as default};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ladder-ui/checkbox",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -30,7 +30,8 @@
30
30
  "license": "ISC",
31
31
  "repository": {
32
32
  "type": "git",
33
- "url": "git+ssh://git@github.com/ivelaval/ladder-ui.git"
33
+ "url": "https://github.com/ivelaval/ladder-ui.git",
34
+ "directory": "packages/checkbox"
34
35
  },
35
36
  "bugs": {
36
37
  "url": "https://github.com/ivelaval/ladder-ui/issues"
@@ -47,8 +48,8 @@
47
48
  "sass": "^1.90.0",
48
49
  "tslib": "^2.6.2",
49
50
  "typescript": "^5.3.3",
50
- "@ladder-ui/core": "0.4.0",
51
- "@ladder-ui/primitives": "0.4.0"
51
+ "@ladder-ui/core": "0.5.0",
52
+ "@ladder-ui/primitives": "0.5.0"
52
53
  },
53
54
  "peerDependencies": {
54
55
  "@ladder-ui/core": ">=0.0.0",