@refineui/react 0.0.1

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.
Files changed (131) hide show
  1. package/dist/index.cjs +15530 -0
  2. package/dist/index.cjs.map +1 -0
  3. package/dist/index.d.cts +3905 -0
  4. package/dist/index.d.ts +3905 -0
  5. package/dist/index.js +15445 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/spec/README.md +95 -0
  8. package/dist/spec/components/accordion.json +126 -0
  9. package/dist/spec/components/alert.json +71 -0
  10. package/dist/spec/components/avatar.json +30 -0
  11. package/dist/spec/components/avatars.json +29 -0
  12. package/dist/spec/components/badge.json +41 -0
  13. package/dist/spec/components/box.json +16 -0
  14. package/dist/spec/components/breadcrumb.json +40 -0
  15. package/dist/spec/components/bubble.json +31 -0
  16. package/dist/spec/components/button.json +104 -0
  17. package/dist/spec/components/calendar.json +52 -0
  18. package/dist/spec/components/card.json +57 -0
  19. package/dist/spec/components/carousel.json +65 -0
  20. package/dist/spec/components/chart.json +34 -0
  21. package/dist/spec/components/checkbox.json +38 -0
  22. package/dist/spec/components/chip.json +65 -0
  23. package/dist/spec/components/command.json +65 -0
  24. package/dist/spec/components/container.json +16 -0
  25. package/dist/spec/components/dialog.json +95 -0
  26. package/dist/spec/components/divider.json +29 -0
  27. package/dist/spec/components/drawer.json +71 -0
  28. package/dist/spec/components/dropdown.json +64 -0
  29. package/dist/spec/components/field.json +31 -0
  30. package/dist/spec/components/footer.json +45 -0
  31. package/dist/spec/components/grid.json +17 -0
  32. package/dist/spec/components/input-otp.json +34 -0
  33. package/dist/spec/components/input.json +36 -0
  34. package/dist/spec/components/label.json +24 -0
  35. package/dist/spec/components/link.json +38 -0
  36. package/dist/spec/components/menu.json +67 -0
  37. package/dist/spec/components/navigation-menu.json +74 -0
  38. package/dist/spec/components/pagination.json +41 -0
  39. package/dist/spec/components/popover.json +42 -0
  40. package/dist/spec/components/progress-stepper.json +61 -0
  41. package/dist/spec/components/progress.json +28 -0
  42. package/dist/spec/components/radio.json +43 -0
  43. package/dist/spec/components/resizable.json +34 -0
  44. package/dist/spec/components/scroll-area.json +50 -0
  45. package/dist/spec/components/search-field.json +53 -0
  46. package/dist/spec/components/segmented-control.json +67 -0
  47. package/dist/spec/components/select.json +113 -0
  48. package/dist/spec/components/sidebar.json +45 -0
  49. package/dist/spec/components/skeleton.json +21 -0
  50. package/dist/spec/components/slider.json +43 -0
  51. package/dist/spec/components/spacer.json +16 -0
  52. package/dist/spec/components/spin-button.json +45 -0
  53. package/dist/spec/components/spinner.json +35 -0
  54. package/dist/spec/components/stack.json +16 -0
  55. package/dist/spec/components/stepper.json +62 -0
  56. package/dist/spec/components/switch.json +52 -0
  57. package/dist/spec/components/table.json +17 -0
  58. package/dist/spec/components/tabs.json +77 -0
  59. package/dist/spec/components/tag.json +65 -0
  60. package/dist/spec/components/text.json +16 -0
  61. package/dist/spec/components/textarea.json +22 -0
  62. package/dist/spec/components/toast.json +45 -0
  63. package/dist/spec/components/tooltip.json +31 -0
  64. package/dist/spec/components/tree.json +80 -0
  65. package/dist/spec/contract-index.json +721 -0
  66. package/dist/spec/manifest.json +686 -0
  67. package/dist/spec/schema/component-spec.schema.json +203 -0
  68. package/dist/spec/token-graph.json +6605 -0
  69. package/dist/spec/token-trace-v2.json +5170 -0
  70. package/package.json +54 -0
  71. package/refineui.css +2275 -0
  72. package/spec/README.md +95 -0
  73. package/spec/components/accordion.json +126 -0
  74. package/spec/components/alert.json +71 -0
  75. package/spec/components/avatar.json +30 -0
  76. package/spec/components/avatars.json +29 -0
  77. package/spec/components/badge.json +41 -0
  78. package/spec/components/box.json +16 -0
  79. package/spec/components/breadcrumb.json +40 -0
  80. package/spec/components/bubble.json +31 -0
  81. package/spec/components/button.json +104 -0
  82. package/spec/components/calendar.json +52 -0
  83. package/spec/components/card.json +57 -0
  84. package/spec/components/carousel.json +65 -0
  85. package/spec/components/chart.json +34 -0
  86. package/spec/components/checkbox.json +38 -0
  87. package/spec/components/chip.json +65 -0
  88. package/spec/components/command.json +65 -0
  89. package/spec/components/container.json +16 -0
  90. package/spec/components/dialog.json +95 -0
  91. package/spec/components/divider.json +29 -0
  92. package/spec/components/drawer.json +71 -0
  93. package/spec/components/dropdown.json +64 -0
  94. package/spec/components/field.json +31 -0
  95. package/spec/components/footer.json +45 -0
  96. package/spec/components/grid.json +17 -0
  97. package/spec/components/input-otp.json +34 -0
  98. package/spec/components/input.json +36 -0
  99. package/spec/components/label.json +24 -0
  100. package/spec/components/link.json +38 -0
  101. package/spec/components/menu.json +67 -0
  102. package/spec/components/navigation-menu.json +74 -0
  103. package/spec/components/pagination.json +41 -0
  104. package/spec/components/popover.json +42 -0
  105. package/spec/components/progress-stepper.json +61 -0
  106. package/spec/components/progress.json +28 -0
  107. package/spec/components/radio.json +43 -0
  108. package/spec/components/resizable.json +34 -0
  109. package/spec/components/scroll-area.json +50 -0
  110. package/spec/components/search-field.json +53 -0
  111. package/spec/components/segmented-control.json +67 -0
  112. package/spec/components/select.json +113 -0
  113. package/spec/components/sidebar.json +45 -0
  114. package/spec/components/skeleton.json +21 -0
  115. package/spec/components/slider.json +43 -0
  116. package/spec/components/spacer.json +16 -0
  117. package/spec/components/spin-button.json +45 -0
  118. package/spec/components/spinner.json +35 -0
  119. package/spec/components/stack.json +16 -0
  120. package/spec/components/stepper.json +62 -0
  121. package/spec/components/switch.json +52 -0
  122. package/spec/components/table.json +17 -0
  123. package/spec/components/tabs.json +77 -0
  124. package/spec/components/tag.json +65 -0
  125. package/spec/components/text.json +16 -0
  126. package/spec/components/textarea.json +22 -0
  127. package/spec/components/toast.json +45 -0
  128. package/spec/components/tooltip.json +31 -0
  129. package/spec/components/tree.json +80 -0
  130. package/spec/manifest.json +686 -0
  131. package/spec/schema/component-spec.schema.json +203 -0
package/spec/README.md ADDED
@@ -0,0 +1,95 @@
1
+ # Component Spec — Contract Layer
2
+
3
+ **Status: catalog (v1.1)** — all shipped components have Spec JSON; interactive components declare a11y / keyboard / focus / environment where implementation + CSS already satisfy Doctor.
4
+
5
+ Source of truth for behavior/DOM contracts consumed by Doctor, MCP, and Docs.
6
+
7
+ ```
8
+ packages/react/spec/
9
+ ├── manifest.json
10
+ ├── schema/component-spec.schema.json
11
+ └── components/*.json
12
+ ```
13
+
14
+ Build copies this tree to `packages/react/dist/spec/` and adds `token-trace-v2.json`, `token-graph.json`, `contract-index.json`.
15
+
16
+ ## Boundaries
17
+
18
+ | Owns | Does not own |
19
+ |------|----------------|
20
+ | anatomy, variants, states | Tailwind classes / hex |
21
+ | accessibility, keyboard, focus | Usage guides / WCAG essays |
22
+ | layout (logical / RTL) | Full bidirectional layout proof |
23
+ | environment (`forced-colors`, `dir`, …) | Full High Contrast audit |
24
+ | `recipe` string reference | Recipe visual implementation |
25
+
26
+ ```
27
+ Component Spec → Doctor (validate declared contracts only)
28
+ → MCP (explain)
29
+ → Docs SpecRenderer (render declared fields only)
30
+ recipe ref → SlotRecipe / defineRecipe (visual)
31
+ → Docs ComponentPreview + TokenInspector
32
+ ```
33
+
34
+ ## Spec fields (v1)
35
+
36
+ | Field | Purpose |
37
+ |-------|---------|
38
+ | `anatomy` | Part → `data-refineui` slot |
39
+ | `variants` | Axis → allowed values |
40
+ | `states` | pseudo / component / availability / environment |
41
+ | `dom` | Per-slot state overrides |
42
+ | `accessibility` | Slot a11y contracts |
43
+ | `keyboard` | Key → action (`native` allowed) |
44
+ | `focus` | visual + behavior |
45
+ | `layout` | `direction: logical`, `rtl` |
46
+ | `tokens.visual` | Component token prefix |
47
+ | `recipe` | Recipe name reference |
48
+
49
+ ## Doctor rules (contract)
50
+
51
+ Doctor validates **declared** fields only. Catalog specs start with anatomy (+ variants / `data-state` where known). Declaring `focus`, `keyboard`, `accessibility`, `layout`, or `forced-colors` opts that component into the matching Doctor rule.
52
+
53
+ | Rule | Validates |
54
+ |------|-----------|
55
+ | `component-state-contract` | `data-state` literals vs Spec |
56
+ | `accessibility-contract` | required attrs, types, relationships, native |
57
+ | `keyboard-contract` | key handlers (skips `native`) |
58
+ | `focus-contract` | `:focus-visible` + trap/initial/return patterns |
59
+ | `environment-contract` | `forced-colors` + `prefers-contrast` CSS blocks + slots |
60
+ | `layout-contract` | no physical left/right utilities |
61
+ | `state-contract` | `data-refineui` / focus preference |
62
+ | `motion-contract` | reduced-motion / motion roles |
63
+
64
+ ## Coverage
65
+
66
+ | Surface | Scope |
67
+ |---------|--------|
68
+ | Spec JSON + Docs SpecRenderer | All catalog components in `manifest.json` |
69
+ | Deep a11y / keyboard / focus / environment / layout | Interactive + layout-clean components (Doctor-validated) |
70
+ | Docs ComponentPreview | alert, button, accordion, dialog, badge, switch, checkbox, tabs, select, toast, spinner, chip, tag, segmented-control |
71
+ | SlotRecipe (`defineSlotRecipe`) | alert, accordion, dialog, segmented-control |
72
+ | Single recipe (`defineRecipe`) | button, badge, toast, chip |
73
+ | Docs TokenInspector | alert, button, accordion, dialog, badge, toast, tabs, chip, tag, segmented-control, switch, checkbox, select, spinner |
74
+
75
+ Environment: `forced-colors` + `prefers-contrast` (CSS in `refineui.css`; Doctor validates both).
76
+
77
+ ### Intentional physical leftovers
78
+
79
+ Doctor `layout-contract` rejects Tailwind `left`/`right`/`pl`/`ml`/`text-left` utilities. These remain **intentional** (not flagged or deferred):
80
+
81
+ | Pattern | Where | Why |
82
+ |---------|-------|-----|
83
+ | `-translate-x-1/2` + `start-1/2` | PopOver, Resizable | Horizontal centering; no logical translate utility |
84
+ | `left` / `right` / `translateX(-50%)` | Tooltip panel/arrow | MCP position×align map still physical CSS |
85
+ | `-translate-x-1/2` | Chart x-axis labels | Tick centering under measured SVG positions |
86
+ | Measured `translateX(...)` | Drawer overlay, NavigationMenu indicator | Runtime geometry, not static utilities |
87
+
88
+ Switch thumb travel uses `translateX` in `refineui.css` with `[dir="rtl"]` negation.
89
+
90
+ Regenerate baseline then deepen:
91
+
92
+ ```bash
93
+ node packages/react/scripts/expand-component-specs.mjs
94
+ node packages/react/scripts/deepen-component-specs.mjs
95
+ ```
@@ -0,0 +1,126 @@
1
+ {
2
+ "$schema": "../schema/component-spec.schema.json",
3
+ "component": "accordion",
4
+ "version": 1,
5
+ "export": "Accordion",
6
+ "anatomy": {
7
+ "root": "accordion",
8
+ "item": "accordion-item",
9
+ "trigger": "accordion-trigger",
10
+ "panel": "accordion-panel",
11
+ "content": "accordion-content"
12
+ },
13
+ "variants": {
14
+ "size": [
15
+ "sm",
16
+ "md",
17
+ "lg"
18
+ ],
19
+ "type": [
20
+ "single",
21
+ "multiple"
22
+ ]
23
+ },
24
+ "states": {
25
+ "pseudo": [
26
+ "focus-visible"
27
+ ],
28
+ "component": {
29
+ "data-state": [
30
+ "open",
31
+ "closed"
32
+ ]
33
+ },
34
+ "environment": [
35
+ "forced-colors",
36
+ "dir",
37
+ "prefers-contrast"
38
+ ]
39
+ },
40
+ "attributes": {
41
+ "data-refineui": "accordion"
42
+ },
43
+ "dom": {
44
+ "accordion-item": {
45
+ "states": {
46
+ "component": {
47
+ "data-state": [
48
+ "open",
49
+ "closed"
50
+ ]
51
+ }
52
+ }
53
+ },
54
+ "accordion-trigger": {
55
+ "states": {
56
+ "pseudo": [
57
+ "focus-visible"
58
+ ]
59
+ }
60
+ }
61
+ },
62
+ "accessibility": {
63
+ "accordion-trigger": {
64
+ "element": "button",
65
+ "role": "button",
66
+ "requiredAttributes": {
67
+ "aria-expanded": {
68
+ "required": true,
69
+ "type": "boolean"
70
+ },
71
+ "aria-controls": {
72
+ "required": true,
73
+ "type": "string"
74
+ }
75
+ },
76
+ "relationships": [
77
+ {
78
+ "attribute": "aria-controls",
79
+ "target": "accordion-panel",
80
+ "targetAttribute": "id",
81
+ "required": true
82
+ }
83
+ ]
84
+ },
85
+ "accordion-panel": {
86
+ "role": "region",
87
+ "requiredAttributes": {
88
+ "aria-labelledby": {
89
+ "required": true,
90
+ "type": "string"
91
+ }
92
+ },
93
+ "relationships": [
94
+ {
95
+ "attribute": "aria-labelledby",
96
+ "target": "accordion-trigger",
97
+ "targetAttribute": "id",
98
+ "required": true
99
+ }
100
+ ]
101
+ }
102
+ },
103
+ "keyboard": {
104
+ "ArrowDown": "next-trigger",
105
+ "ArrowUp": "previous-trigger",
106
+ "Home": "first-trigger",
107
+ "End": "last-trigger"
108
+ },
109
+ "focus": {
110
+ "visual": {
111
+ "required": true,
112
+ "selector": ":focus-visible"
113
+ },
114
+ "behavior": {
115
+ "roving": false
116
+ }
117
+ },
118
+ "layout": {
119
+ "direction": "logical",
120
+ "rtl": true
121
+ },
122
+ "recipe": "accordion",
123
+ "tokens": {
124
+ "visual": "accordion"
125
+ }
126
+ }
@@ -0,0 +1,71 @@
1
+ {
2
+ "$schema": "../schema/component-spec.schema.json",
3
+ "component": "alert",
4
+ "version": 1,
5
+ "export": "Alert",
6
+ "anatomy": {
7
+ "root": "alert",
8
+ "icon": "alert-icon",
9
+ "content": "alert-content",
10
+ "row": "alert-row",
11
+ "body": "alert-body",
12
+ "title": "alert-title",
13
+ "description": "alert-description",
14
+ "actions": "alert-actions",
15
+ "action": "alert-action",
16
+ "close": "alert-close"
17
+ },
18
+ "variants": {
19
+ "variant": [
20
+ "default",
21
+ "info",
22
+ "success",
23
+ "warning",
24
+ "danger",
25
+ "custom"
26
+ ]
27
+ },
28
+ "states": {
29
+ "pseudo": [
30
+ "focus-visible"
31
+ ],
32
+ "environment": [
33
+ "forced-colors",
34
+ "dir",
35
+ "prefers-contrast"
36
+ ]
37
+ },
38
+ "attributes": {
39
+ "data-refineui": "alert",
40
+ "data-variant": "variant"
41
+ },
42
+ "dom": {
43
+ "alert": {
44
+ "states": {
45
+ "pseudo": [
46
+ "focus-visible"
47
+ ]
48
+ }
49
+ }
50
+ },
51
+ "accessibility": {
52
+ "alert": {
53
+ "element": "div",
54
+ "role": "alert"
55
+ }
56
+ },
57
+ "focus": {
58
+ "visual": {
59
+ "required": true,
60
+ "selector": ":focus-visible"
61
+ }
62
+ },
63
+ "layout": {
64
+ "direction": "logical",
65
+ "rtl": true
66
+ },
67
+ "tokens": {
68
+ "visual": "alert"
69
+ },
70
+ "recipe": "alert"
71
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "$schema": "../schema/component-spec.schema.json",
3
+ "component": "avatar",
4
+ "version": 1,
5
+ "export": "Avatar",
6
+ "anatomy": {
7
+ "root": "avatar"
8
+ },
9
+ "attributes": {
10
+ "data-refineui": "avatar"
11
+ },
12
+ "variants": {
13
+ "size": [
14
+ "xs",
15
+ "sm",
16
+ "md",
17
+ "lg",
18
+ "xl"
19
+ ],
20
+ "layout": [
21
+ "image",
22
+ "icon",
23
+ "initials"
24
+ ]
25
+ },
26
+ "layout": {
27
+ "direction": "logical",
28
+ "rtl": true
29
+ }
30
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "$schema": "../schema/component-spec.schema.json",
3
+ "component": "avatars",
4
+ "version": 1,
5
+ "export": "Avatars",
6
+ "anatomy": {
7
+ "root": "avatars"
8
+ },
9
+ "attributes": {
10
+ "data-refineui": "avatars"
11
+ },
12
+ "variants": {
13
+ "size": [
14
+ "xs",
15
+ "sm",
16
+ "md",
17
+ "lg",
18
+ "xl"
19
+ ],
20
+ "layout": [
21
+ "stack",
22
+ "spread"
23
+ ]
24
+ },
25
+ "layout": {
26
+ "direction": "logical",
27
+ "rtl": true
28
+ }
29
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "$schema": "../schema/component-spec.schema.json",
3
+ "component": "badge",
4
+ "version": 1,
5
+ "export": "Badge",
6
+ "anatomy": {
7
+ "root": "badge"
8
+ },
9
+ "attributes": {
10
+ "data-refineui": "badge"
11
+ },
12
+ "variants": {
13
+ "variant": [
14
+ "default",
15
+ "neutral",
16
+ "outline",
17
+ "success",
18
+ "warning",
19
+ "danger"
20
+ ],
21
+ "layout": [
22
+ "label",
23
+ "number"
24
+ ]
25
+ },
26
+ "layout": {
27
+ "direction": "logical",
28
+ "rtl": true
29
+ },
30
+ "recipe": "badge",
31
+ "tokens": {
32
+ "visual": "badge"
33
+ },
34
+ "states": {
35
+ "environment": [
36
+ "forced-colors",
37
+ "dir",
38
+ "prefers-contrast"
39
+ ]
40
+ }
41
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "$schema": "../schema/component-spec.schema.json",
3
+ "component": "box",
4
+ "version": 1,
5
+ "export": "Box",
6
+ "anatomy": {
7
+ "root": "box"
8
+ },
9
+ "attributes": {
10
+ "data-refineui": "box"
11
+ },
12
+ "layout": {
13
+ "direction": "logical",
14
+ "rtl": true
15
+ }
16
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "$schema": "../schema/component-spec.schema.json",
3
+ "component": "breadcrumb",
4
+ "version": 1,
5
+ "export": "Breadcrumb",
6
+ "anatomy": {
7
+ "root": "breadcrumb",
8
+ "ellipsis": "breadcrumb-ellipsis",
9
+ "link": "breadcrumb-link",
10
+ "page": "breadcrumb-page"
11
+ },
12
+ "attributes": {
13
+ "data-refineui": "breadcrumb"
14
+ },
15
+ "states": {
16
+ "pseudo": [
17
+ "focus-visible"
18
+ ],
19
+ "environment": [
20
+ "forced-colors",
21
+ "dir"
22
+ ]
23
+ },
24
+ "accessibility": {
25
+ "breadcrumb-page": {
26
+ "element": "div",
27
+ "role": "link"
28
+ }
29
+ },
30
+ "focus": {
31
+ "visual": {
32
+ "required": true,
33
+ "selector": ":focus-visible"
34
+ }
35
+ },
36
+ "layout": {
37
+ "direction": "logical",
38
+ "rtl": true
39
+ }
40
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "$schema": "../schema/component-spec.schema.json",
3
+ "component": "bubble",
4
+ "version": 1,
5
+ "export": "Bubble",
6
+ "anatomy": {
7
+ "root": "bubble",
8
+ "content": "bubble-content",
9
+ "group": "bubble-group",
10
+ "reactions": "bubble-reactions",
11
+ "surface": "bubble-surface"
12
+ },
13
+ "attributes": {
14
+ "data-refineui": "bubble"
15
+ },
16
+ "variants": {
17
+ "variant": [
18
+ "default",
19
+ "secondary",
20
+ "muted",
21
+ "tinted",
22
+ "outline",
23
+ "ghost",
24
+ "destructive"
25
+ ]
26
+ },
27
+ "layout": {
28
+ "direction": "logical",
29
+ "rtl": true
30
+ }
31
+ }
@@ -0,0 +1,104 @@
1
+ {
2
+ "$schema": "../schema/component-spec.schema.json",
3
+ "component": "button",
4
+ "version": 1,
5
+ "export": "Button",
6
+ "anatomy": {
7
+ "root": "button",
8
+ "icon": "optional",
9
+ "label": "required"
10
+ },
11
+ "variants": {
12
+ "variant": [
13
+ "primary",
14
+ "secondary",
15
+ "outline",
16
+ "ghost"
17
+ ],
18
+ "size": [
19
+ "sm",
20
+ "md",
21
+ "lg"
22
+ ],
23
+ "layout": [
24
+ "label",
25
+ "icon"
26
+ ]
27
+ },
28
+ "states": {
29
+ "pseudo": [
30
+ "hover",
31
+ "active",
32
+ "focus-visible"
33
+ ],
34
+ "availability": [
35
+ "disabled",
36
+ "aria-disabled",
37
+ "data-inactive"
38
+ ],
39
+ "component": {
40
+ "data-state": [
41
+ "loading"
42
+ ]
43
+ },
44
+ "environment": [
45
+ "forced-colors",
46
+ "dir",
47
+ "prefers-contrast"
48
+ ]
49
+ },
50
+ "attributes": {
51
+ "data-refineui": "button"
52
+ },
53
+ "dom": {
54
+ "button": {
55
+ "states": {
56
+ "pseudo": [
57
+ "hover",
58
+ "active",
59
+ "focus-visible"
60
+ ],
61
+ "availability": [
62
+ "disabled",
63
+ "aria-disabled",
64
+ "data-inactive"
65
+ ],
66
+ "component": {
67
+ "data-state": [
68
+ "loading"
69
+ ]
70
+ }
71
+ }
72
+ }
73
+ },
74
+ "accessibility": {
75
+ "button": {
76
+ "element": "button",
77
+ "native": true
78
+ }
79
+ },
80
+ "keyboard": {
81
+ "Enter": {
82
+ "action": "activate",
83
+ "native": true
84
+ },
85
+ "Space": {
86
+ "action": "activate",
87
+ "native": true
88
+ }
89
+ },
90
+ "focus": {
91
+ "visual": {
92
+ "required": true,
93
+ "selector": ":focus-visible"
94
+ }
95
+ },
96
+ "layout": {
97
+ "direction": "logical",
98
+ "rtl": true
99
+ },
100
+ "tokens": {
101
+ "visual": "button"
102
+ },
103
+ "recipe": "button"
104
+ }
@@ -0,0 +1,52 @@
1
+ {
2
+ "$schema": "../schema/component-spec.schema.json",
3
+ "component": "calendar",
4
+ "version": 1,
5
+ "export": "Calendar",
6
+ "anatomy": {
7
+ "root": "calendar",
8
+ "day": "calendar-day"
9
+ },
10
+ "attributes": {
11
+ "data-refineui": "calendar"
12
+ },
13
+ "states": {
14
+ "pseudo": [
15
+ "focus-visible"
16
+ ],
17
+ "environment": [
18
+ "forced-colors",
19
+ "dir"
20
+ ]
21
+ },
22
+ "accessibility": {
23
+ "calendar": {
24
+ "element": "div",
25
+ "role": "grid"
26
+ },
27
+ "calendar-day": {
28
+ "element": "button",
29
+ "role": "gridcell"
30
+ }
31
+ },
32
+ "keyboard": {
33
+ "Enter": {
34
+ "action": "activate",
35
+ "native": true
36
+ },
37
+ "Space": {
38
+ "action": "activate",
39
+ "native": true
40
+ }
41
+ },
42
+ "focus": {
43
+ "visual": {
44
+ "required": true,
45
+ "selector": ":focus-visible"
46
+ }
47
+ },
48
+ "layout": {
49
+ "direction": "logical",
50
+ "rtl": true
51
+ }
52
+ }
@@ -0,0 +1,57 @@
1
+ {
2
+ "$schema": "../schema/component-spec.schema.json",
3
+ "component": "card",
4
+ "version": 1,
5
+ "export": "Card",
6
+ "anatomy": {
7
+ "root": "card",
8
+ "action": "card-action",
9
+ "content": "card-content",
10
+ "description": "card-description",
11
+ "footer": "card-footer",
12
+ "header": "card-header",
13
+ "header_main": "card-header-main",
14
+ "title": "card-title"
15
+ },
16
+ "attributes": {
17
+ "data-refineui": "card"
18
+ },
19
+ "variants": {
20
+ "variant": [
21
+ "elevated",
22
+ "outlined"
23
+ ]
24
+ },
25
+ "states": {
26
+ "component": {
27
+ "data-state": [
28
+ "default",
29
+ "hover",
30
+ "pressed",
31
+ "disabled"
32
+ ]
33
+ },
34
+ "environment": [
35
+ "forced-colors",
36
+ "dir"
37
+ ]
38
+ },
39
+ "dom": {
40
+ "card": {
41
+ "states": {
42
+ "component": {
43
+ "data-state": [
44
+ "default",
45
+ "hover",
46
+ "pressed",
47
+ "disabled"
48
+ ]
49
+ }
50
+ }
51
+ }
52
+ },
53
+ "layout": {
54
+ "direction": "logical",
55
+ "rtl": true
56
+ }
57
+ }