symbols-app-connect 3.2.8

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/package.json ADDED
@@ -0,0 +1,103 @@
1
+ {
2
+ "name": "symbols-app-connect",
3
+ "displayName": "Symbols.app Connect",
4
+ "description": "Symbols.app Connect for DOMQL syntax — properties, events, components, element methods, state and more",
5
+ "version": "3.2.8",
6
+ "publisher": "symbo-ls",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/symbo-ls/smbls"
10
+ },
11
+ "engines": {
12
+ "vscode": "^1.85.0"
13
+ },
14
+ "categories": [
15
+ "Other",
16
+ "Programming Languages"
17
+ ],
18
+ "keywords": [
19
+ "domql",
20
+ "smbls",
21
+ "symbols",
22
+ "intellisense",
23
+ "autocomplete"
24
+ ],
25
+ "icon": "icon.png",
26
+ "activationEvents": [
27
+ "onLanguage:javascript",
28
+ "onLanguage:typescript",
29
+ "onLanguage:javascriptreact",
30
+ "onLanguage:typescriptreact"
31
+ ],
32
+ "main": "./out/extension.js",
33
+ "contributes": {
34
+ "commands": [
35
+ {
36
+ "command": "symbolsApp.toggle",
37
+ "title": "Toggle Symbols.app Connect",
38
+ "category": "Symbols.app"
39
+ },
40
+ {
41
+ "command": "symbolsApp.diagnose",
42
+ "title": "Diagnose Symbols.app Connect",
43
+ "category": "Symbols.app"
44
+ }
45
+ ],
46
+ "configuration": {
47
+ "title": "Symbols.app",
48
+ "properties": {
49
+ "symbolsApp.enable": {
50
+ "type": "boolean",
51
+ "default": true,
52
+ "description": "Enable Symbols.app Connect"
53
+ },
54
+ "symbolsApp.detectByImports": {
55
+ "type": "boolean",
56
+ "default": true,
57
+ "description": "Activate only in files importing from domql/smbls packages. When false, activates in all JS/TS files."
58
+ },
59
+ "symbolsApp.completeCssProps": {
60
+ "type": "boolean",
61
+ "default": true,
62
+ "description": "Suggest CSS properties as top-level element keys (they get promoted to props automatically)"
63
+ }
64
+ }
65
+ },
66
+ "configurationDefaults": {
67
+ "[javascript]": {
68
+ "editor.quickSuggestions": {
69
+ "strings": "on"
70
+ }
71
+ },
72
+ "[typescript]": {
73
+ "editor.quickSuggestions": {
74
+ "strings": "on"
75
+ }
76
+ },
77
+ "[javascriptreact]": {
78
+ "editor.quickSuggestions": {
79
+ "strings": "on"
80
+ }
81
+ },
82
+ "[typescriptreact]": {
83
+ "editor.quickSuggestions": {
84
+ "strings": "on"
85
+ }
86
+ }
87
+ }
88
+ },
89
+ "scripts": {
90
+ "vscode:prepublish": "npm run esbuild-base -- --minify",
91
+ "esbuild-base": "esbuild ./src/extension.ts --bundle --outfile=out/extension.js --external:vscode --format=cjs --platform=node",
92
+ "compile": "npm run esbuild-base",
93
+ "watch": "npm run esbuild-base -- --watch",
94
+ "package": "npx @vscode/vsce package --no-dependencies",
95
+ "install-vsce": "npm install -g @vscode/vsce"
96
+ },
97
+ "devDependencies": {
98
+ "@types/node": "^20.0.0",
99
+ "@types/vscode": "^1.85.0",
100
+ "esbuild": "^0.20.0",
101
+ "typescript": "^5.3.0"
102
+ }
103
+ }
@@ -0,0 +1,182 @@
1
+ export interface ComponentInfo {
2
+ label: string
3
+ detail: string
4
+ documentation: string
5
+ snippet?: string
6
+ }
7
+
8
+ export const BUILT_IN_ATOMS: ComponentInfo[] = [
9
+ {
10
+ label: 'Box',
11
+ detail: 'Box: object → <div>',
12
+ documentation: 'Generic container element. Maps to `<div>`.\n\nCommon props: `padding`, `margin`, `background`, `border`, `borderRadius`, `width`, `height`, `overflow`, `position`',
13
+ snippet: 'Box: {\n ${1:padding}: "${2:A}",\n},'
14
+ },
15
+ {
16
+ label: 'Flex',
17
+ detail: 'Flex: object → <div> (flexbox)',
18
+ documentation: 'Flexbox layout container.\n\nCommon props: `flow`, `align`, `gap`, `wrap`, `alignItems`, `justifyContent`\n\n```js\nFlex: {\n flow: "y",\n align: "center space-between",\n gap: "B"\n}\n```',
19
+ snippet: 'Flex: {\n flow: "${1:y}",\n gap: "${2:B}",\n},'
20
+ },
21
+ {
22
+ label: 'Grid',
23
+ detail: 'Grid: object → <div> (CSS grid)',
24
+ documentation: 'CSS Grid layout container.\n\nCommon props: `columns`, `rows`, `gap`\n\n```js\nGrid: {\n columns: "repeat(3, 1fr)",\n gap: "A"\n}\n```',
25
+ snippet: 'Grid: {\n columns: "${1:repeat(3, 1fr)}",\n gap: "${2:A}",\n},'
26
+ },
27
+ {
28
+ label: 'Text',
29
+ detail: 'Text: object → <span>',
30
+ documentation: 'Inline text element.\n\nCommon props: `text`, `color`, `fontSize`, `fontWeight`, `lineHeight`\n\n```js\nText: { text: "Hello", fontSize: "B", color: "title" }\n```',
31
+ snippet: 'Text: {\n text: "${1:}",\n},'
32
+ },
33
+ {
34
+ label: 'Button',
35
+ detail: 'Button: object → <button>',
36
+ documentation: 'Actionable button element.\n\nCommon props: `text`, `icon`, `type`, `disabled`, `theme`, `padding`, `round`, `onClick`\n\n```js\nButton: { text: "Save", theme: "primary", onClick: (ev, el) => {} }\n```',
37
+ snippet: 'Button: {\n text: "${1:Label}",\n onClick: (event, el, state) => {\n ${2:}\n },\n},'
38
+ },
39
+ {
40
+ label: 'Link',
41
+ detail: 'Link: object → <a>',
42
+ documentation: 'Anchor/link element.\n\nCommon props: `text`, `href`, `target`, `rel`, `color`, `textDecoration`\n\n```js\nLink: { text: "Read more", href: "/article" }\n```',
43
+ snippet: 'Link: {\n text: "${1:}",\n href: "${2:/}",\n},'
44
+ },
45
+ {
46
+ label: 'Input',
47
+ detail: 'Input: object → <input>',
48
+ documentation: 'Text input element.\n\nCommon props: `type`, `name`, `value`, `placeholder`, `required`, `disabled`, `onInput`, `onChange`\n\n```js\nInput: { type: "text", placeholder: "Enter name", onInput: (ev, el, state) => {} }\n```',
49
+ snippet: 'Input: {\n type: "${1:text}",\n placeholder: "${2:}",\n},'
50
+ },
51
+ {
52
+ label: 'Icon',
53
+ detail: 'Icon: object → <svg> (icon sprite)',
54
+ documentation: 'Icon from the design system sprite.\n\nCommon props: `name`, `boxSize`, `color`\n\n```js\nIcon: { name: "chevronRight", boxSize: "A" }\n```',
55
+ snippet: 'Icon: {\n name: "${1:}",\n},'
56
+ },
57
+ {
58
+ label: 'IconText',
59
+ detail: 'IconText: object → <div>',
60
+ documentation: 'Icon + text combination.\n\nCommon props: `icon`, `text`, `gap`, `align`\n\n```js\nIconText: { icon: "search", text: "Search", gap: "Z" }\n```',
61
+ snippet: 'IconText: {\n icon: "${1:}",\n text: "${2:}",\n},'
62
+ },
63
+ {
64
+ label: 'Img',
65
+ detail: 'Img: object → <img>',
66
+ documentation: 'Image element.\n\nCommon props: `src`, `alt`, `loading`, `width`, `height`, `boxSize`, `objectFit`\n\n```js\nImg: { src: "/logo.png", alt: "Logo", boxSize: "B" }\n```',
67
+ snippet: 'Img: {\n src: "${1:}",\n alt: "${2:}",\n},'
68
+ },
69
+ {
70
+ label: 'Svg',
71
+ detail: 'Svg: object → <svg>',
72
+ documentation: 'Raw SVG container.\n\nCommon props: `html` (inline SVG markup), `width`, `height`, `viewBox`, `fill`, `stroke`\n\n```js\nSvg: { html: "<path d=\'...\' />", viewBox: "0 0 24 24" }\n```',
73
+ snippet: 'Svg: {\n html: "${1:}",\n viewBox: "${2:0 0 24 24}",\n},'
74
+ },
75
+ {
76
+ label: 'Iframe',
77
+ detail: 'Iframe: object → <iframe>',
78
+ documentation: 'Embedded content frame.\n\nCommon props: `src`, `title`, `allow`, `sandbox`, `width`, `height`\n\n```js\nIframe: { src: "https://example.com", width: "100%", height: "300px" }\n```',
79
+ snippet: 'Iframe: {\n src: "${1:}",\n width: "${2:100%}",\n height: "${3:300px}",\n},'
80
+ },
81
+ {
82
+ label: 'Video',
83
+ detail: 'Video: object → <video>',
84
+ documentation: 'Video player element.\n\nCommon props: `src`, `poster`, `controls`, `autoplay`, `muted`, `loop`, `width`, `height`\n\n```js\nVideo: { src: "/demo.mp4", controls: true, width: "100%" }\n```',
85
+ snippet: 'Video: {\n src: "${1:}",\n controls: true,\n},'
86
+ },
87
+ {
88
+ label: 'Radio',
89
+ detail: 'Radio: object → <input type="radio">',
90
+ documentation: 'Radio input element.\n\nCommon props: `name`, `value`, `checked`, `disabled`, `onChange`\n\n```js\nRadio: { name: "option", value: "a" }\n```',
91
+ snippet: 'Radio: {\n name: "${1:}",\n value: "${2:}",\n},'
92
+ },
93
+ {
94
+ label: 'Checkbox',
95
+ detail: 'Checkbox: object → <input type="checkbox">',
96
+ documentation: 'Checkbox input element.\n\nCommon props: `name`, `value`, `checked`, `disabled`, `onChange`\n\n```js\nCheckbox: { name: "agree", checked: true }\n```',
97
+ snippet: 'Checkbox: {\n name: "${1:}",\n},'
98
+ }
99
+ ]
100
+
101
+ export const UIKIT_COMPONENTS: ComponentInfo[] = [
102
+ // Typography
103
+ { label: 'H1', detail: 'H1: object → <h1>', documentation: 'H1 heading. Common props: `text`, `color`, `fontSize`', snippet: 'H1: { text: "${1:}" },' },
104
+ { label: 'H2', detail: 'H2: object → <h2>', documentation: 'H2 heading.', snippet: 'H2: { text: "${1:}" },' },
105
+ { label: 'H3', detail: 'H3: object → <h3>', documentation: 'H3 heading.', snippet: 'H3: { text: "${1:}" },' },
106
+ { label: 'H4', detail: 'H4: object → <h4>', documentation: 'H4 heading.', snippet: 'H4: { text: "${1:}" },' },
107
+ { label: 'H5', detail: 'H5: object → <h5>', documentation: 'H5 heading.', snippet: 'H5: { text: "${1:}" },' },
108
+ { label: 'H6', detail: 'H6: object → <h6>', documentation: 'H6 heading.', snippet: 'H6: { text: "${1:}" },' },
109
+ { label: 'P', detail: 'P: object → <p>', documentation: 'Paragraph element.\n\nCommon props: `text`, `color`, `fontSize`, `lineHeight`, `maxWidth`', snippet: 'P: { text: "${1:}" },' },
110
+ { label: 'Caption', detail: 'Caption: object → <span>', documentation: 'Small caption/label text.', snippet: 'Caption: { text: "${1:}" },' },
111
+ { label: 'Headline', detail: 'Headline: object → <span>', documentation: 'Large emphasis/display text.', snippet: 'Headline: { text: "${1:}" },' },
112
+ { label: 'Subhead', detail: 'Subhead: object → <span>', documentation: 'Subheading text.', snippet: 'Subhead: { text: "${1:}" },' },
113
+ { label: 'Footnote', detail: 'Footnote: object → <span>', documentation: 'Footer reference text.', snippet: 'Footnote: { text: "${1:}" },' },
114
+ { label: 'Strong', detail: 'Strong: object → <strong>', documentation: 'Bold inline text.', snippet: 'Strong: { text: "${1:}" },' },
115
+ { label: 'Italic', detail: 'Italic: object → <em>', documentation: 'Italic inline text.', snippet: 'Italic: { text: "${1:}" },' },
116
+ { label: 'U', detail: 'U: object → <u>', documentation: 'Underlined inline text.', snippet: 'U: { text: "${1:}" },' },
117
+
118
+ // Dividers
119
+ { label: 'Hr', detail: 'Hr: object → <hr>', documentation: 'Horizontal rule divider.', snippet: 'Hr: {},' },
120
+ { label: 'HrLegend', detail: 'HrLegend: object → <div>', documentation: 'Divider with centered label text.\n\nCommon props: `text`', snippet: 'HrLegend: { text: "${1:Or}" },' },
121
+
122
+ // Buttons (composite)
123
+ { label: 'IconButton', detail: 'IconButton: object', documentation: 'Icon-only circular button.\n\nCommon props: `Icon.name`, `theme`, `fontSize`, `padding`\n\n```js\nIconButton: { Icon: { name: "plus" }, theme: "dialog" }\n```', snippet: 'IconButton: {\n Icon: { name: "${1:}" },\n},' },
124
+ { label: 'SubmitButton', detail: 'SubmitButton: object', documentation: 'Form submit button.\n\nCommon props: `value` (label).\n\n```js\nSubmitButton: { value: "Create account" }\n```', snippet: 'SubmitButton: {\n value: "${1:Submit}",\n},' },
125
+
126
+ // Avatar
127
+ { label: 'Avatar', detail: 'Avatar: object', documentation: 'User profile image.\n\nCommon props: `boxSize` (default `"C2"`), `src`, `alt`\n\n```js\nAvatar: { boxSize: "C2" }\n```', snippet: 'Avatar: {\n boxSize: "${1:C2}",\n},' },
128
+ { label: 'AvatarStatus', detail: 'AvatarStatus: object', documentation: 'Avatar with status dot.\n\nCommon props: `Avatar.boxSize`, `StatusDot.theme`\n\n```js\nAvatarStatus: { StatusDot: { theme: "success" } }\n```', snippet: 'AvatarStatus: {\n StatusDot: { theme: "${1:success}" },\n},' },
129
+ { label: 'AvatarSet', detail: 'AvatarSet: object', documentation: 'Group of overlapping avatars.\n\nCommon props: `children`', snippet: 'AvatarSet: {\n children: [${1:}],\n},' },
130
+ { label: 'AvatarHgroup', detail: 'AvatarHgroup: object', documentation: 'Avatar with name and subtitle.\n\n```js\nAvatarHgroup: { H: { text: "Name" }, P: { text: "Role" } }\n```', snippet: 'AvatarHgroup: {\n H: { text: "${1:}" },\n P: { text: "${2:}" },\n},' },
131
+
132
+ // Badge
133
+ { label: 'Badge', detail: 'Badge: object', documentation: 'Small colored label badge.\n\nCommon props: `text`, `theme` (default `"warning"`)\n\n```js\nBadge: { text: "New", theme: "primary" }\n```', snippet: 'Badge: {\n text: "${1:}",\n theme: "${2:primary}",\n},' },
134
+ { label: 'NotificationCounter', detail: 'NotificationCounter: object', documentation: 'Circular number badge.\n\nCommon props: `text` (number), `theme`\n\n```js\nNotificationCounter: { text: "5", theme: "primary" }\n```', snippet: 'NotificationCounter: {\n text: "${1:0}",\n},' },
135
+
136
+ // Form
137
+ { label: 'Field', detail: 'Field: object', documentation: 'Styled text input with optional icon.\n\nCommon props: `Input.placeholder`, `Input.type`, `Icon.icon`, `theme`\n\n```js\nField: { Input: { placeholder: "Enter name" }, Icon: { icon: "user" } }\n```', snippet: 'Field: {\n Input: { placeholder: "${1:}" },\n},' },
138
+ { label: 'FieldCaption', detail: 'FieldCaption: object', documentation: 'Labeled field with caption above.\n\nCommon props: `Caption.text`, `Field` props', snippet: 'FieldCaption: {\n Caption: { text: "${1:Label}" },\n Field: { Input: { placeholder: "${2:}" } },\n},' },
139
+ { label: 'Select', detail: 'Select: object → <select>', documentation: 'Native select element.\n\nCommon props: `children` (array of `{ text, value }` options)', snippet: 'Select: {\n children: [\n { text: "${1:Option}", value: "${2:value}" },\n ],\n},' },
140
+ { label: 'SelectPicker', detail: 'SelectPicker: object', documentation: 'Styled select with chevron icon.\n\nCommon props: `Select.children`, `Icon.name`', snippet: 'SelectPicker: {\n Select: {\n children: [\n { text: "${1:Option}", value: "${2:value}" },\n ],\n },\n},' },
141
+ { label: 'Search', detail: 'Search: object', documentation: 'Search input with icon.\n\nCommon props: `Input.placeholder`, `Icon.name`\n\n```js\nSearch: { Input: { placeholder: "Search…" } }\n```', snippet: 'Search: {\n Input: { placeholder: "${1:Search…}" },\n},' },
142
+
143
+ // Navigation
144
+ { label: 'TabSet', detail: 'TabSet: object', documentation: 'Horizontal tab bar.\n\nCommon props: `children` (tab objects with `text` and optional `isActive`)\n\n```js\nTabSet: { children: [{ text: "Overview", isActive: true }, { text: "Details" }] }\n```', snippet: 'TabSet: {\n children: [\n { text: "${1:Tab 1}", isActive: true },\n { text: "${2:Tab 2}" },\n ],\n},' },
145
+ { label: 'LinkSet', detail: 'LinkSet: object', documentation: 'Navigation list of links.\n\nCommon props: `tag: "nav"`, `childExtend: "Link"`, `children`', snippet: 'LinkSet: {\n tag: "nav",\n children: [\n { text: "${1:Home}", href: "${2:/}" },\n ],\n},' },
146
+ { label: 'Breadcrumb', detail: 'Breadcrumb: object', documentation: 'Breadcrumb navigation.\n\nCommon props: `tag: "nav"`, `childExtend: "Link"`', snippet: 'Breadcrumb: {\n tag: "nav",\n},' },
147
+ { label: 'Pagination', detail: 'Pagination: object', documentation: 'Numbered page controls.', snippet: 'Pagination: {},' },
148
+
149
+ // Progress / Status
150
+ { label: 'Progress', detail: 'Progress: object', documentation: 'Linear progress bar.\n\nCommon props: `value` (0–1), `height`, `minWidth`, `round`, `theme`\n\n```js\nProgress: { value: 0.6, height: "X", round: "Y" }\n```', snippet: 'Progress: {\n value: ${1:0.5},\n},' },
151
+ { label: 'CircleProgress', detail: 'CircleProgress: object', documentation: 'Circular progress ring.\n\nCommon props: `value` (0–1), `boxSize`\n\n```js\nCircleProgress: { value: 0.73, boxSize: "D" }\n```', snippet: 'CircleProgress: {\n value: ${1:0.5},\n boxSize: "${2:D}",\n},' },
152
+ { label: 'StatusDot', detail: 'StatusDot: object', documentation: 'Small status indicator dot.\n\nCommon props: `theme` (`"success"`, `"error"`, `"warning"`)\n\n```js\nStatusDot: { theme: "success" }\n```', snippet: 'StatusDot: {\n theme: "${1:success}",\n},' },
153
+
154
+ // Overlay
155
+ { label: 'Modal', detail: 'Modal: object', documentation: 'Dialog overlay container.\n\nCommon props: `Hgroup.H.text`, `Hgroup.P.text`, `IconButton.Icon.name`, `theme: "dialog"`\n\n```js\nModal: { Hgroup: { H: { text: "Confirm" } }, IconButton: { Icon: { name: "x" } } }\n```', snippet: 'Modal: {\n Hgroup: {\n H: { text: "${1:Title}" },\n P: { text: "${2:Subtitle}" },\n },\n IconButton: { Icon: { name: "x" } },\n},' },
156
+ { label: 'Accordion', detail: 'Accordion: object', documentation: 'Expandable/collapsible section.\n\nCommon props: `ButtonParagraph.P.text`, `P.text`, `state.activeAccordion`', snippet: 'Accordion: {\n ButtonParagraph: { P: { text: "${1:Question}" } },\n P: { text: "${2:Answer}" },\n},' },
157
+
158
+ // Data display
159
+ { label: 'UnitValue', detail: 'UnitValue: object', documentation: 'Unit + value pair (price, stat).\n\nCommon props: `Unit.text`, `Value.text`, `flow`\n\n```js\nUnitValue: { Unit: { text: "$" }, Value: { text: "99" } }\n```', snippet: 'UnitValue: {\n Unit: { text: "${1:$}" },\n Value: { text: "${2:}" },\n},' },
160
+ { label: 'Stars', detail: 'Stars: object', documentation: '5-star rating display.', snippet: 'Stars: {},' },
161
+
162
+ // Layout helpers
163
+ { label: 'Hgroup', detail: 'Hgroup: object', documentation: 'Heading group (heading + paragraph).\n\n```js\nHgroup: { H: { text: "Title" }, P: { text: "Subtitle" } }\n```', snippet: 'Hgroup: {\n H: { text: "${1:}" },\n P: { text: "${2:}" },\n},' },
164
+
165
+ // Misc
166
+ { label: 'Span', detail: 'Span: object → <span>', documentation: 'Inline span element.', snippet: 'Span: { text: "${1:}" },' },
167
+ { label: 'Div', detail: 'Div: object → <div>', documentation: 'Generic div container.', snippet: 'Div: {},' },
168
+ { label: 'Section', detail: 'Section: object → <section>', documentation: 'Section element.', snippet: 'Section: {},' },
169
+ { label: 'Header', detail: 'Header: object → <header>', documentation: 'Header element.', snippet: 'Header: {},' },
170
+ { label: 'Footer', detail: 'Footer: object → <footer>', documentation: 'Footer element.', snippet: 'Footer: {},' },
171
+ { label: 'Nav', detail: 'Nav: object → <nav>', documentation: 'Navigation element.', snippet: 'Nav: {},' },
172
+ { label: 'Main', detail: 'Main: object → <main>', documentation: 'Main content element.', snippet: 'Main: {},' },
173
+ { label: 'Article', detail: 'Article: object → <article>', documentation: 'Article element.', snippet: 'Article: {},' },
174
+ { label: 'Aside', detail: 'Aside: object → <aside>', documentation: 'Aside/sidebar element.', snippet: 'Aside: {},' },
175
+ { label: 'Form', detail: 'Form: object → <form>', documentation: 'Form element.', snippet: 'Form: {\n tag: "form",\n onSubmit: (event, el, state) => {\n event.preventDefault()\n ${1:}\n },\n},' },
176
+ { label: 'Table', detail: 'Table: object → <table>', documentation: 'Table element.', snippet: 'Table: {},' },
177
+ { label: 'Tr', detail: 'Tr: object → <tr>', documentation: 'Table row element.', snippet: 'Tr: {},' },
178
+ { label: 'Td', detail: 'Td: object → <td>', documentation: 'Table data cell.', snippet: 'Td: {},' },
179
+ { label: 'Th', detail: 'Th: object → <th>', documentation: 'Table header cell.', snippet: 'Th: {},' },
180
+ ]
181
+
182
+ export const ALL_COMPONENTS = [...BUILT_IN_ATOMS, ...UIKIT_COMPONENTS]
@@ -0,0 +1,187 @@
1
+ // CSS properties that can be used at the top level of a DOMQL element.
2
+ // They get automatically promoted to element.props by propertizeElement().
3
+
4
+ export interface CssPropInfo {
5
+ label: string
6
+ detail: string
7
+ documentation?: string
8
+ }
9
+
10
+ // Design-system shorthand props (DOMQL/smbls specific)
11
+ export const DESIGN_SYSTEM_PROPS: CssPropInfo[] = [
12
+ { label: 'flow', detail: 'Shorthand for flexDirection', documentation: 'Shorthand for `flexDirection`. Common values: `"column"`, `"row"`, `"y"`, `"x"`, `"column-reverse"`\n\n```js\nflow: "column"\nflow: "x" // alias for "row"\n```' },
13
+ { label: 'align', detail: 'Shorthand for alignItems and justifyContent', documentation: 'Shorthand for united `alignItems` and `justifyContent`.\n\n```js\nalign: "center center"\nalign: "flex-start space-between"\n```' },
14
+ { label: 'flexAlign', detail: 'Shorthand for alignItems and justifyContent', documentation: 'Shorthand for united `alignItems` and `justifyContent`.\n\n```js\nflexAlign: "flex-start center"\n```' },
15
+ { label: 'round', detail: 'Rounding the corners of the shape', documentation: 'Rounding the corners of the shape. Accepts spacing design tokens or CSS values.\n\n```js\nround: "C2"\nround: "100%"\n```' },
16
+ { label: 'boxSize', detail: 'Range of width and height', documentation: 'Range of width and height. Accepts spacing design tokens.\n\n```js\nboxSize: "C1 E" // width: C1, height: E\nboxSize: "D" // both width and height\n```' },
17
+ { label: 'widthRange', detail: 'Range of min-width and max-width', documentation: 'Range of min-width and max-width.\n\n```js\nwidthRange: "A1 B2" // minWidth: A1, maxWidth: B2\nwidthRange: "H2 50%"\n```' },
18
+ { label: 'heightRange', detail: 'Range of min-height and max-height', documentation: 'Range of min-height and max-height.\n\n```js\nheightRange: "A1 B2" // minHeight: A1, maxHeight: B2\n```' },
19
+ { label: 'theme', detail: 'Reference a theme from Themes configuration', documentation: 'Reference the value from the Themes configuration.\n\n```js\ntheme: "primary"\ntheme: "primary .active"\ntheme: { color: "white", "@dark": { color: "blue" } }\n```' },
20
+ { label: 'columns', detail: 'Shorthand for gridTemplateColumns', documentation: 'Shorthand for `gridTemplateColumns`.' },
21
+ { label: 'rows', detail: 'Shorthand for gridTemplateRows', documentation: 'Shorthand for `gridTemplateRows`.' },
22
+ { label: 'wrap', detail: 'Shorthand for flexWrap', documentation: 'Shorthand for `flexWrap`. E.g. `"wrap"`, `"nowrap"`' },
23
+ { label: 'inset', detail: 'CSS inset shorthand (top, right, bottom, left)', documentation: 'CSS inset shorthand (top, right, bottom, left).' },
24
+ { label: 'shape', detail: 'Name of the shape from Shapes configuration', documentation: 'Name of the shape from Shapes configuration.\n\n```js\nshape: "tag"\nshape: "tooltip top"\n```' },
25
+ { label: 'shapeModifier', detail: 'Shape direction and position attributes', documentation: 'If the shape is either tooltip or tag, sets additional attributes like direction or position.\n\n```js\nshapeModifier: { position: "block center", direction: "north west" }\n```' },
26
+ { label: 'shadow', detail: 'Shadow depth with color and offset tokens', documentation: 'Level of the shadow that adds depth to the element.\n\n```js\nshadow: "black A A C" // color x y depth\n```' },
27
+ ]
28
+
29
+ // Standard CSS properties
30
+ export const STANDARD_CSS_PROPS: CssPropInfo[] = [
31
+ // Layout
32
+ { label: 'display', detail: 'CSS display mode' },
33
+ { label: 'position', detail: 'CSS positioning method' },
34
+ { label: 'top', detail: 'Top offset position' },
35
+ { label: 'right', detail: 'Right offset position' },
36
+ { label: 'bottom', detail: 'Bottom offset position' },
37
+ { label: 'left', detail: 'Left offset position' },
38
+ { label: 'zIndex', detail: 'Stack order of the element' },
39
+ { label: 'overflow', detail: 'Content overflow behavior' },
40
+ { label: 'overflowX', detail: 'Horizontal overflow behavior' },
41
+ { label: 'overflowY', detail: 'Vertical overflow behavior' },
42
+ { label: 'visibility', detail: 'Element visibility' },
43
+
44
+ // Flexbox
45
+ { label: 'flexDirection', detail: 'CSS flexDirection property' },
46
+ { label: 'flexFlow', detail: 'CSS flexFlow property' },
47
+ { label: 'flexWrap', detail: 'CSS flexWrap property' },
48
+ { label: 'flexGrow', detail: 'Flex grow factor' },
49
+ { label: 'flexShrink', detail: 'Flex shrink factor' },
50
+ { label: 'flexBasis', detail: 'Initial main size of flex item' },
51
+ { label: 'flex', detail: 'Flex shorthand (grow shrink basis)' },
52
+ { label: 'alignItems', detail: 'CSS alignItems property' },
53
+ { label: 'alignContent', detail: 'CSS alignContent property' },
54
+ { label: 'alignSelf', detail: 'CSS alignSelf property' },
55
+ { label: 'justifyContent', detail: 'CSS justifyContent property' },
56
+ { label: 'justifyItems', detail: 'CSS justifyItems property' },
57
+ { label: 'justifySelf', detail: 'CSS justifySelf property' },
58
+ { label: 'gap', detail: 'gap: string', documentation: 'The space between children inside the element. Accepts spacing design tokens.\n\n```js\ngap: "A2"\ngap: "B C" // rowGap columnGap\n```' },
59
+ { label: 'rowGap', detail: 'Space between rows' },
60
+ { label: 'columnGap', detail: 'Space between columns' },
61
+ { label: 'order', detail: 'Flex/grid item order' },
62
+
63
+ // Grid
64
+ { label: 'gridTemplateColumns', detail: 'Grid column track sizes' },
65
+ { label: 'gridTemplateRows', detail: 'Grid row track sizes' },
66
+ { label: 'gridTemplateAreas', detail: 'Named grid template areas' },
67
+ { label: 'gridColumn', detail: 'Grid column placement' },
68
+ { label: 'gridRow', detail: 'Grid row placement' },
69
+ { label: 'gridArea', detail: 'Grid area placement' },
70
+ { label: 'gridAutoFlow', detail: 'Auto-placement algorithm' },
71
+ { label: 'gridAutoColumns', detail: 'Auto-generated column size' },
72
+ { label: 'gridAutoRows', detail: 'Auto-generated row size' },
73
+
74
+ // Sizing
75
+ { label: 'width', detail: 'Width of the element', documentation: 'Width of the element. Accepts spacing design tokens or CSS values.\n\n```js\nwidth: "F1"\nwidth: "100%"\n```' },
76
+ { label: 'height', detail: 'Height of the element', documentation: 'Height of the element. Accepts spacing design tokens or CSS values.\n\n```js\nheight: "F1"\n```' },
77
+ { label: 'minWidth', detail: 'Min width of the box', documentation: 'Min width of the box. Accepts spacing design tokens or CSS values.' },
78
+ { label: 'maxWidth', detail: 'Max width of the box', documentation: 'Max width of the box. Accepts spacing design tokens or CSS values.' },
79
+ { label: 'minHeight', detail: 'Min height of the box', documentation: 'Min height of the box. Accepts spacing design tokens or CSS values.' },
80
+ { label: 'maxHeight', detail: 'Max height of the box', documentation: 'Max height of the box. Accepts spacing design tokens or CSS values.' },
81
+ { label: 'aspectRatio', detail: 'Aspect ratio of the box (1/3, 3/7…)', documentation: 'Aspect ratio of the box.\n\n```js\naspectRatio: "1 / 2"\n```' },
82
+
83
+ // Spacing
84
+ { label: 'padding', detail: 'Space inside the element', documentation: 'Space inside the element. Accepts spacing design tokens or CSS values.\n\n```js\npadding: "A1 C2"\npadding: "Z2 C"\n```' },
85
+ { label: 'paddingTop', detail: 'Top inner space' },
86
+ { label: 'paddingRight', detail: 'Right inner space' },
87
+ { label: 'paddingBottom', detail: 'Bottom inner space' },
88
+ { label: 'paddingLeft', detail: 'Left inner space' },
89
+ { label: 'paddingInline', detail: 'Inline (horizontal) inner space' },
90
+ { label: 'paddingBlock', detail: 'Block (vertical) inner space' },
91
+ { label: 'margin', detail: 'Outer space of the element', documentation: 'Outer space of the element. Accepts spacing design tokens or CSS values.\n\n```js\nmargin: "0 -B2"\n```' },
92
+ { label: 'marginTop', detail: 'Top outer space' },
93
+ { label: 'marginRight', detail: 'Right outer space' },
94
+ { label: 'marginBottom', detail: 'Bottom outer space' },
95
+ { label: 'marginLeft', detail: 'Left outer space' },
96
+ { label: 'marginInline', detail: 'Inline (horizontal) outer space' },
97
+ { label: 'marginBlock', detail: 'Block (vertical) outer space' },
98
+
99
+ // Background
100
+ { label: 'background', detail: 'background: string', documentation: 'Setting the specific background color matching with one from the Colors page. Accepts color tokens with modifiers.\n\n```js\nbackground: "gray"\nbackground: "blue.5" // with opacity\n```' },
101
+ { label: 'backgroundColor', detail: 'Background color of the element' },
102
+ { label: 'backgroundImage', detail: 'Background image URL or gradient' },
103
+ { label: 'backgroundSize', detail: 'Background image sizing' },
104
+ { label: 'backgroundPosition', detail: 'Background image position' },
105
+ { label: 'backgroundRepeat', detail: 'Background image repeat behavior' },
106
+ { label: 'backgroundClip', detail: 'Background painting area' },
107
+
108
+ // Border
109
+ { label: 'border', detail: 'border: string', documentation: 'Border with design system color tokens. Order: color, size, style.\n\n```js\nborder: "blue 1px solid"\nborderTop: "1px solid gray.5"\n```' },
110
+ { label: 'borderTop', detail: 'Top border with color tokens' },
111
+ { label: 'borderRight', detail: 'Right border with color tokens' },
112
+ { label: 'borderBottom', detail: 'Bottom border with color tokens' },
113
+ { label: 'borderLeft', detail: 'Left border with color tokens' },
114
+ { label: 'borderWidth', detail: 'Border width' },
115
+ { label: 'borderStyle', detail: 'Border line style' },
116
+ { label: 'borderColor', detail: 'Border color from design system' },
117
+ { label: 'borderRadius', detail: 'borderRadius: string', documentation: 'Rounding the corners of the shape. Accepts spacing design tokens.\n\n```js\nborderRadius: "C2"\n```' },
118
+ { label: 'borderTopLeftRadius', detail: 'Top-left corner radius' },
119
+ { label: 'borderTopRightRadius', detail: 'Top-right corner radius' },
120
+ { label: 'borderBottomLeftRadius', detail: 'Bottom-left corner radius' },
121
+ { label: 'borderBottomRightRadius', detail: 'Bottom-right corner radius' },
122
+ { label: 'outline', detail: 'Outline around the element' },
123
+ { label: 'outlineOffset', detail: 'Space between element and outline' },
124
+
125
+ // Typography
126
+ { label: 'color', detail: 'Text color from design system', documentation: 'Setting the specific text color matching with one from the Colors page. Accepts color tokens with modifiers.\n\n```js\ncolor: "title"\ncolor: "blue.5" // with opacity\n```' },
127
+ { label: 'fontSize', detail: 'Typography sequence or CSS value', documentation: 'Using typography sequence or default CSS values. Accepts typography design tokens.\n\n```js\nfontSize: "B"\nfontSize: "Z1"\n```' },
128
+ { label: 'fontWeight', detail: 'Font weight from configuration', documentation: 'CSS font-weight value. Finds the closest weight in configuration or sets variable font value.\n\n```js\nfontWeight: "500"\n```' },
129
+ { label: 'fontFamily', detail: 'Font family name' },
130
+ { label: 'fontStyle', detail: 'Font style (normal, italic)' },
131
+ { label: 'lineHeight', detail: 'Line height of text' },
132
+ { label: 'letterSpacing', detail: 'Space between characters' },
133
+ { label: 'textAlign', detail: 'Text horizontal alignment' },
134
+ { label: 'textDecoration', detail: 'Text decoration (underline, etc.)' },
135
+ { label: 'textTransform', detail: 'Text case transformation' },
136
+ { label: 'textOverflow', detail: 'Overflowed text behavior' },
137
+ { label: 'whiteSpace', detail: 'White space handling' },
138
+ { label: 'wordBreak', detail: 'Word breaking rules' },
139
+ { label: 'wordWrap', detail: 'Word wrapping behavior' },
140
+
141
+ // Effects
142
+ { label: 'opacity', detail: 'Element transparency (0-1)' },
143
+ { label: 'boxShadow', detail: 'CSS box shadow' },
144
+ { label: 'filter', detail: 'Visual filter effects (blur, brightness)' },
145
+ { label: 'backdropFilter', detail: 'Backdrop filter effects' },
146
+ { label: 'transform', detail: 'CSS transform (translate, rotate, scale)' },
147
+ { label: 'transformOrigin', detail: 'Transform origin point' },
148
+ { label: 'transition', detail: 'transition: string', documentation: 'Transition using timing design tokens.\n\n```js\ntransition: "A defaultBezier"\n```' },
149
+ { label: 'transitionProperty', detail: 'Properties to transition' },
150
+ { label: 'transitionDuration', detail: 'transitionDuration: string', documentation: 'Duration value from Timing sequence, or CSS value.' },
151
+ { label: 'transitionTimingFunction', detail: 'Transition easing function' },
152
+ { label: 'transitionDelay', detail: 'Delay before transition starts' },
153
+ { label: 'animation', detail: 'animation: string', documentation: 'Bundle animation properties. Accepts animation name and timing tokens.\n\n```js\nanimation: "fadeIn"\nanimation: "fadeIn C1 my-custom-bezier"\n```' },
154
+ { label: 'animationName', detail: 'animationName: string', documentation: 'Name of the animation defined in design system.' },
155
+ { label: 'animationDuration', detail: 'animationDuration: string', documentation: 'Duration value from Timing sequence, or CSS value.\n\n```js\nanimationDuration: "C"\n```' },
156
+ { label: 'animationDelay', detail: 'animationDelay: string', documentation: 'Delay value from Timing sequence, or CSS value.' },
157
+ { label: 'animationTimingFunction', detail: 'animationTimingFunction: string', documentation: 'A value from Timing sequence, or CSS animation-timing-function property.' },
158
+ { label: 'animationFillMode', detail: 'animationFillMode: string' },
159
+ { label: 'animationPlayState', detail: 'animationPlayState: string' },
160
+ { label: 'animationIterationCount', detail: 'animationIterationCount: string' },
161
+ { label: 'animationDirection', detail: 'animationDirection: string' },
162
+
163
+ // Cursor / pointer
164
+ { label: 'cursor', detail: 'Mouse cursor appearance' },
165
+ { label: 'pointerEvents', detail: 'Pointer event targeting' },
166
+ { label: 'userSelect', detail: 'Text selection behavior' },
167
+
168
+ // Misc
169
+ { label: 'objectFit', detail: 'Replaced element fitting' },
170
+ { label: 'objectPosition', detail: 'Replaced element position' },
171
+ { label: 'resize', detail: 'Element resize behavior' },
172
+ { label: 'content', detail: 'Generated content for pseudo-elements' },
173
+ { label: 'listStyle', detail: 'List marker style' },
174
+ { label: 'tableLayout', detail: 'Table layout algorithm' },
175
+ { label: 'verticalAlign', detail: 'Vertical alignment' },
176
+ { label: 'appearance', detail: 'Native UI appearance' },
177
+ { label: 'boxSizing', detail: 'Box model sizing method' },
178
+ { label: 'isolation', detail: 'Stacking context isolation' },
179
+ { label: 'mixBlendMode', detail: 'Color blending mode' },
180
+ { label: 'willChange', detail: 'Performance optimization hint' },
181
+ { label: 'clipPath', detail: 'Clipping region shape' },
182
+ { label: 'fill', detail: 'SVG fill color' },
183
+ { label: 'stroke', detail: 'SVG stroke color' },
184
+ { label: 'strokeWidth', detail: 'SVG stroke width' },
185
+ ]
186
+
187
+ export const ALL_CSS_PROPS = [...DESIGN_SYSTEM_PROPS, ...STANDARD_CSS_PROPS]