@compa11y/web 0.1.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.
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Shared styles for compa11y Web Components
3
+ */
4
+ export declare const VISUALLY_HIDDEN_STYLES = "\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n";
5
+ export declare const RESET_BUTTON_STYLES = "\n appearance: none;\n background: none;\n border: none;\n padding: 0;\n margin: 0;\n font: inherit;\n color: inherit;\n cursor: pointer;\n";
6
+ export declare const FOCUS_VISIBLE_STYLES = "\n :host(:focus-visible),\n :focus-visible {\n outline: 2px solid var(--compa11y-focus-color, #0066cc);\n outline-offset: 2px;\n }\n";
7
+ /**
8
+ * Base styles shared by all components
9
+ */
10
+ export declare const BASE_STYLES = "\n :host {\n display: block;\n box-sizing: border-box;\n }\n\n :host([hidden]) {\n display: none !important;\n }\n\n *,\n *::before,\n *::after {\n box-sizing: inherit;\n }\n\n \n :host(:focus-visible),\n :focus-visible {\n outline: 2px solid var(--compa11y-focus-color, #0066cc);\n outline-offset: 2px;\n }\n\n";
11
+ /**
12
+ * Dialog-specific styles
13
+ */
14
+ export declare const DIALOG_STYLES = "\n \n :host {\n display: block;\n box-sizing: border-box;\n }\n\n :host([hidden]) {\n display: none !important;\n }\n\n *,\n *::before,\n *::after {\n box-sizing: inherit;\n }\n\n \n :host(:focus-visible),\n :focus-visible {\n outline: 2px solid var(--compa11y-focus-color, #0066cc);\n outline-offset: 2px;\n }\n\n\n\n :host {\n position: fixed;\n inset: 0;\n z-index: var(--compa11y-dialog-z-index, 9999);\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .overlay {\n position: absolute;\n inset: 0;\n background: var(--compa11y-dialog-overlay-bg, rgba(0, 0, 0, 0.5));\n }\n\n .dialog {\n position: relative;\n background: var(--compa11y-dialog-bg, white);\n border-radius: var(--compa11y-dialog-radius, 8px);\n padding: var(--compa11y-dialog-padding, 1.5rem);\n max-width: var(--compa11y-dialog-max-width, 500px);\n max-height: var(--compa11y-dialog-max-height, 85vh);\n overflow: auto;\n box-shadow: var(--compa11y-dialog-shadow, 0 25px 50px -12px rgba(0, 0, 0, 0.25));\n }\n\n ::slotted([slot=\"title\"]) {\n margin: 0 0 0.5rem 0;\n font-size: 1.25rem;\n font-weight: 600;\n }\n\n ::slotted([slot=\"description\"]) {\n margin: 0 0 1rem 0;\n color: var(--compa11y-dialog-description-color, #666);\n }\n";
15
+ /**
16
+ * Menu-specific styles
17
+ */
18
+ export declare const MENU_STYLES = "\n \n :host {\n display: block;\n box-sizing: border-box;\n }\n\n :host([hidden]) {\n display: none !important;\n }\n\n *,\n *::before,\n *::after {\n box-sizing: inherit;\n }\n\n \n :host(:focus-visible),\n :focus-visible {\n outline: 2px solid var(--compa11y-focus-color, #0066cc);\n outline-offset: 2px;\n }\n\n\n\n :host {\n position: relative;\n display: inline-block;\n }\n\n .menu-content {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: var(--compa11y-menu-z-index, 1000);\n min-width: var(--compa11y-menu-min-width, 160px);\n background: var(--compa11y-menu-bg, white);\n border: var(--compa11y-menu-border, 1px solid #e0e0e0);\n border-radius: var(--compa11y-menu-radius, 4px);\n box-shadow: var(--compa11y-menu-shadow, 0 4px 6px -1px rgba(0, 0, 0, 0.1));\n padding: var(--compa11y-menu-padding, 0.25rem 0);\n margin-top: var(--compa11y-menu-offset, 4px);\n }\n\n .menu-content[hidden] {\n display: none;\n }\n\n ::slotted([role=\"menuitem\"]) {\n display: block;\n width: 100%;\n padding: 0.5rem 1rem;\n text-align: left;\n background: none;\n border: none;\n cursor: pointer;\n font: inherit;\n }\n\n ::slotted([role=\"menuitem\"]:hover),\n ::slotted([role=\"menuitem\"][data-highlighted=\"true\"]) {\n background: var(--compa11y-menu-item-hover-bg, #f5f5f5);\n }\n\n ::slotted([role=\"menuitem\"][aria-disabled=\"true\"]) {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n ::slotted([role=\"separator\"]) {\n height: 1px;\n margin: 0.25rem 0;\n background: var(--compa11y-menu-separator-color, #e0e0e0);\n }\n";
19
+ /**
20
+ * Tabs-specific styles
21
+ */
22
+ export declare const TABS_STYLES = "\n \n :host {\n display: block;\n box-sizing: border-box;\n }\n\n :host([hidden]) {\n display: none !important;\n }\n\n *,\n *::before,\n *::after {\n box-sizing: inherit;\n }\n\n \n :host(:focus-visible),\n :focus-visible {\n outline: 2px solid var(--compa11y-focus-color, #0066cc);\n outline-offset: 2px;\n }\n\n\n\n .tablist {\n display: flex;\n border-bottom: var(--compa11y-tabs-border, 1px solid #e0e0e0);\n gap: var(--compa11y-tabs-gap, 0);\n }\n\n :host([orientation=\"vertical\"]) .tablist {\n flex-direction: column;\n border-bottom: none;\n border-right: var(--compa11y-tabs-border, 1px solid #e0e0e0);\n }\n\n ::slotted([role=\"tab\"]) {\n \n appearance: none;\n background: none;\n border: none;\n padding: 0;\n margin: 0;\n font: inherit;\n color: inherit;\n cursor: pointer;\n\n padding: var(--compa11y-tab-padding, 0.75rem 1rem);\n border-bottom: 2px solid transparent;\n margin-bottom: -1px;\n font-weight: 500;\n color: var(--compa11y-tab-color, #666);\n transition: all 0.15s ease;\n }\n\n ::slotted([role=\"tab\"]:hover) {\n color: var(--compa11y-tab-hover-color, #333);\n }\n\n ::slotted([role=\"tab\"][aria-selected=\"true\"]) {\n color: var(--compa11y-tab-active-color, #0066cc);\n border-bottom-color: currentColor;\n }\n\n ::slotted([role=\"tab\"][aria-disabled=\"true\"]) {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n ::slotted([role=\"tabpanel\"]) {\n padding: var(--compa11y-tabpanel-padding, 1rem 0);\n }\n\n ::slotted([role=\"tabpanel\"][hidden]) {\n display: none;\n }\n";
23
+ /**
24
+ * Combobox-specific styles
25
+ */
26
+ export declare const COMBOBOX_STYLES = "\n \n :host {\n display: block;\n box-sizing: border-box;\n }\n\n :host([hidden]) {\n display: none !important;\n }\n\n *,\n *::before,\n *::after {\n box-sizing: inherit;\n }\n\n \n :host(:focus-visible),\n :focus-visible {\n outline: 2px solid var(--compa11y-focus-color, #0066cc);\n outline-offset: 2px;\n }\n\n\n\n :host {\n display: inline-block;\n position: relative;\n width: var(--compa11y-combobox-width, 250px);\n }\n\n .combobox-wrapper {\n position: relative;\n }\n\n .input-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n }\n\n input {\n width: 100%;\n padding: var(--compa11y-combobox-input-padding, 0.5rem 2rem 0.5rem 0.75rem);\n border: var(--compa11y-combobox-border, 1px solid #ccc);\n border-radius: var(--compa11y-combobox-radius, 4px);\n font: inherit;\n background: var(--compa11y-combobox-bg, white);\n color: var(--compa11y-combobox-color, inherit);\n }\n\n input:focus {\n outline: 2px solid var(--compa11y-focus-color, #0066cc);\n outline-offset: -1px;\n border-color: var(--compa11y-focus-color, #0066cc);\n }\n\n input::placeholder {\n color: var(--compa11y-combobox-placeholder-color, #999);\n }\n\n input:disabled {\n background: var(--compa11y-combobox-disabled-bg, #f5f5f5);\n cursor: not-allowed;\n opacity: 0.7;\n }\n\n .chevron {\n position: absolute;\n right: 0.5rem;\n pointer-events: none;\n font-size: 0.75rem;\n color: var(--compa11y-combobox-chevron-color, #666);\n transition: transform 0.15s ease;\n }\n\n :host([open]) .chevron {\n transform: rotate(180deg);\n }\n\n .clear-button {\n \n appearance: none;\n background: none;\n border: none;\n padding: 0;\n margin: 0;\n font: inherit;\n color: inherit;\n cursor: pointer;\n\n position: absolute;\n right: 1.5rem;\n width: 1.25rem;\n height: 1.25rem;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n font-size: 1rem;\n color: var(--compa11y-combobox-clear-color, #666);\n }\n\n .clear-button:hover {\n background: var(--compa11y-combobox-clear-hover-bg, rgba(0, 0, 0, 0.1));\n }\n\n .clear-button[hidden] {\n display: none;\n }\n\n .listbox {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n z-index: var(--compa11y-combobox-z-index, 1000);\n max-height: var(--compa11y-combobox-max-height, 200px);\n overflow-y: auto;\n margin: 0;\n padding: var(--compa11y-combobox-listbox-padding, 0.25rem 0);\n background: var(--compa11y-combobox-listbox-bg, white);\n border: var(--compa11y-combobox-listbox-border, 1px solid #e0e0e0);\n border-radius: var(--compa11y-combobox-radius, 4px);\n box-shadow: var(--compa11y-combobox-shadow, 0 4px 6px -1px rgba(0, 0, 0, 0.1));\n list-style: none;\n }\n\n /* Flip chevron when listbox is positioned above */\n :host([data-position=\"top\"]) .chevron {\n transform: rotate(180deg);\n }\n\n :host([data-position=\"top\"][open]) .chevron {\n transform: rotate(0deg);\n }\n\n .listbox[hidden] {\n display: none;\n }\n\n .listbox li[role=\"option\"] {\n padding: var(--compa11y-combobox-option-padding, 0.5rem 0.75rem);\n cursor: pointer;\n transition: background 0.1s ease;\n }\n\n .listbox li[role=\"option\"]:hover,\n .listbox li[role=\"option\"].highlighted {\n background: var(--compa11y-combobox-option-hover-bg, #f5f5f5);\n }\n\n .listbox li[role=\"option\"][aria-selected=\"true\"] {\n background: var(--compa11y-combobox-option-selected-bg, #e6f0ff);\n font-weight: 500;\n }\n\n .listbox li[role=\"option\"].disabled,\n .listbox li[role=\"option\"][aria-disabled=\"true\"] {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .empty-message {\n padding: var(--compa11y-combobox-option-padding, 0.5rem 0.75rem);\n color: var(--compa11y-combobox-empty-color, #666);\n font-style: italic;\n }\n\n .options-source {\n display: none;\n }\n";
27
+ /**
28
+ * Switch-specific styles
29
+ */
30
+ export declare const SWITCH_STYLES = "\n \n :host {\n display: block;\n box-sizing: border-box;\n }\n\n :host([hidden]) {\n display: none !important;\n }\n\n *,\n *::before,\n *::after {\n box-sizing: inherit;\n }\n\n \n :host(:focus-visible),\n :focus-visible {\n outline: 2px solid var(--compa11y-focus-color, #0066cc);\n outline-offset: 2px;\n }\n\n\n\n :host {\n display: inline-block;\n }\n\n .switch-wrapper {\n display: inline-flex;\n align-items: center;\n gap: var(--compa11y-switch-gap, 0.5rem);\n }\n\n /* Size variants */\n .switch-wrapper.size-sm .switch-track {\n width: var(--compa11y-switch-width-sm, 32px);\n height: var(--compa11y-switch-height-sm, 18px);\n }\n\n .switch-wrapper.size-sm .switch-thumb {\n width: var(--compa11y-switch-thumb-sm, 14px);\n height: var(--compa11y-switch-thumb-sm, 14px);\n }\n\n .switch-wrapper.size-sm .switch-track.checked .switch-thumb {\n transform: translateX(14px);\n }\n\n .switch-wrapper.size-md .switch-track {\n width: var(--compa11y-switch-width-md, 44px);\n height: var(--compa11y-switch-height-md, 24px);\n }\n\n .switch-wrapper.size-md .switch-thumb {\n width: var(--compa11y-switch-thumb-md, 20px);\n height: var(--compa11y-switch-thumb-md, 20px);\n }\n\n .switch-wrapper.size-md .switch-track.checked .switch-thumb {\n transform: translateX(20px);\n }\n\n .switch-wrapper.size-lg .switch-track {\n width: var(--compa11y-switch-width-lg, 56px);\n height: var(--compa11y-switch-height-lg, 30px);\n }\n\n .switch-wrapper.size-lg .switch-thumb {\n width: var(--compa11y-switch-thumb-lg, 26px);\n height: var(--compa11y-switch-thumb-lg, 26px);\n }\n\n .switch-wrapper.size-lg .switch-track.checked .switch-thumb {\n transform: translateX(26px);\n }\n\n .switch-track {\n position: relative;\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n padding: 2px;\n border: none;\n border-radius: var(--compa11y-switch-radius, 9999px);\n background: var(--compa11y-switch-bg, #d1d5db);\n cursor: pointer;\n transition: background-color 0.2s ease;\n outline: none;\n }\n\n .switch-track:focus-visible {\n outline: 2px solid var(--compa11y-focus-color, #0066cc);\n outline-offset: 2px;\n }\n\n .switch-track.checked {\n background: var(--compa11y-switch-checked-bg, #0066cc);\n }\n\n .switch-track:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .switch-thumb {\n position: absolute;\n left: 2px;\n background: var(--compa11y-switch-thumb-bg, white);\n border-radius: 50%;\n box-shadow: var(--compa11y-switch-thumb-shadow, 0 1px 3px rgba(0, 0, 0, 0.2));\n transition: transform 0.2s ease;\n pointer-events: none;\n }\n\n .switch-label {\n user-select: none;\n cursor: pointer;\n color: var(--compa11y-switch-label-color, inherit);\n }\n\n .switch-label.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n";
31
+ //# sourceMappingURL=styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/utils/styles.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,sBAAsB,mLAUlC,CAAC;AAEF,eAAO,MAAM,mBAAmB,wJAS/B,CAAC;AAEF,eAAO,MAAM,oBAAoB,kJAMhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,0VAiBvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,+zCAuCzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,ioDAoDvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,wlDA8CvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,y8HA6I3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,+4FAwGzB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,92 @@
1
+ {
2
+ "name": "@compa11y/web",
3
+ "version": "0.1.0",
4
+ "description": "Accessible Web Components for any HTML page - CDN ready",
5
+ "author": "Ivan Trajkovski",
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "publishConfig": {
9
+ "access": "public"
10
+ },
11
+ "main": "./dist/index.js",
12
+ "module": "./dist/index.mjs",
13
+ "types": "./dist/index.d.ts",
14
+ "homepage": "https://github.com/trajkovskiivan/compa11y#readme",
15
+ "bugs": {
16
+ "url": "https://github.com/trajkovskiivan/compa11y/issues"
17
+ },
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "https://github.com/trajkovskiivan/compa11y.git",
21
+ "directory": "packages/web"
22
+ },
23
+ "exports": {
24
+ ".": {
25
+ "types": "./dist/index.d.ts",
26
+ "import": "./dist/compa11y.js",
27
+ "require": "./dist/compa11y.umd.cjs"
28
+ },
29
+ "./dialog": {
30
+ "types": "./dist/components/dialog.d.ts",
31
+ "import": "./dist/components/dialog.js"
32
+ },
33
+ "./menu": {
34
+ "types": "./dist/components/menu.d.ts",
35
+ "import": "./dist/components/menu.js"
36
+ },
37
+ "./tabs": {
38
+ "types": "./dist/components/tabs.d.ts",
39
+ "import": "./dist/components/tabs.js"
40
+ },
41
+ "./combobox": {
42
+ "types": "./dist/components/combobox.d.ts",
43
+ "import": "./dist/components/combobox.js"
44
+ },
45
+ "./switch": {
46
+ "types": "./dist/components/switch.d.ts",
47
+ "import": "./dist/components/switch.js"
48
+ }
49
+ },
50
+ "unpkg": "./dist/compa11y.iife.js",
51
+ "jsdelivr": "./dist/compa11y.iife.js",
52
+ "files": [
53
+ "dist",
54
+ "README.md",
55
+ "LICENSE"
56
+ ],
57
+ "dependencies": {
58
+ "@compa11y/core": "0.1.0"
59
+ },
60
+ "devDependencies": {
61
+ "@types/node": "^20.11.0",
62
+ "typescript": "^5.3.0",
63
+ "vite": "^5.0.0",
64
+ "vite-plugin-dts": "^3.7.0",
65
+ "vitest": "^1.2.0"
66
+ },
67
+ "sideEffects": true,
68
+ "keywords": [
69
+ "accessibility",
70
+ "a11y",
71
+ "web-components",
72
+ "custom-elements",
73
+ "cdn",
74
+ "dialog",
75
+ "modal",
76
+ "menu",
77
+ "tabs",
78
+ "combobox",
79
+ "autocomplete",
80
+ "select",
81
+ "switch",
82
+ "toggle"
83
+ ],
84
+ "scripts": {
85
+ "build": "vite build",
86
+ "dev": "vite build --watch",
87
+ "test": "vitest run",
88
+ "test:watch": "vitest",
89
+ "typecheck": "tsc --noEmit",
90
+ "clean": "rm -rf dist node_modules"
91
+ }
92
+ }