Skip to content

Commit b7a9962

Browse files
authored
Merge pull request #192 from qualcomm/olaf/parserless-code-connect
chore: add Figma CC files to Angular components
2 parents 9e4b63d + 7490954 commit b7a9962

73 files changed

Lines changed: 3853 additions & 221 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/agents/code-connect-generator.md

Lines changed: 399 additions & 151 deletions
Large diffs are not rendered by default.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"codeConnect": {
3+
"include": ["src/**/*.ts.figma.js"],
4+
"label": "Angular",
5+
"language": "typescript",
6+
"documentUrlSubstitutions": {
7+
"<FIGMA_COMPONENTS_BASE>": "https://www.figma.com/design/G6YKSbQ5Jn83xQBRvlqe6M",
8+
"<FIGMA_ICONS_BASE>": "https://www.figma.com/design/fJC9KDk1b8v5KxHRttSbqS"
9+
}
10+
}
11+
}

packages/frameworks/angular/figma/components.config.json

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
{
22
"codeConnect": {
3-
"include": ["src/**/*"],
4-
"exclude": ["src/**/*.spec.ts"],
5-
"parser": "html",
3+
"include": ["src/**/*.figma.js"],
4+
"exclude": ["src/**/*.ts.figma.js"],
65
"label": "Angular",
7-
"paths": {
8-
"@qualcomm-ui/angular/*": ["./src/*/index.ts"]
9-
},
6+
"language": "html",
107
"documentUrlSubstitutions": {
118
"<FIGMA_COMPONENTS_BASE>": "https://www.figma.com/design/G6YKSbQ5Jn83xQBRvlqe6M",
129
"<FIGMA_ICONS_BASE>": "https://www.figma.com/design/fJC9KDk1b8v5KxHRttSbqS"

packages/frameworks/angular/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
"analyze-bundle": "source-map-explorer bundle-size-dist/main.js",
3131
"explore-bundle": "run-s build:bundle-size analyze-bundle",
3232
"publish-angular-package": "tsx apply-package && qui-cli publish-angular qui-angular",
33-
"figma:publish-components": "figma connect publish -c figma/components.config.json",
33+
"figma:publish-components": "figma connect publish -c figma/components.config.json && figma connect publish -c figma/components-ts.config.json",
3434
"figma:publish-icons": "figma connect publish -c figma/icons.config.json --batch-size 500"
3535
},
3636
"devDependencies": {
@@ -57,7 +57,7 @@
5757
"@angular/ssr": "catalog:",
5858
"@faker-js/faker": "~9.6.0",
5959
"@floating-ui/dom": "^1.7.0",
60-
"@figma/code-connect": "^1.3.13",
60+
"@figma/code-connect": "^1.4.2",
6161
"@jsdevtools/coverage-istanbul-loader": "~3.0.5",
6262
"@module-federation/enhanced": "0.21.2",
6363
"@qualcomm-ui/angular-core": "workspace:^2.0.2",
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
2+
// SPDX-License-Identifier: BSD-3-Clause-Clear
3+
4+
// url=<FIGMA_COMPONENTS_BASE>?node-id=2191-5476
5+
// component=Accordion group
6+
7+
const figma = require("figma")
8+
9+
const instance = figma.selectedInstance
10+
11+
const contained = instance.getBoolean("contained")
12+
const size = instance.getEnum("size", {lg: "lg", sm: "sm"})
13+
14+
const sizeAttr = size ? ` size="${size}"` : ""
15+
const uncontainedAttr = !contained ? " uncontained" : ""
16+
17+
const items = instance.findConnectedInstances(
18+
(node) => typeof node.getBoolean("subHeader") === "boolean",
19+
{traverseInstances: true},
20+
)
21+
22+
const children = items.reduce(
23+
(acc, item) => figma.code`${acc}${item.executeTemplate()?.example}`,
24+
figma.code``,
25+
)
26+
27+
export default {
28+
example: figma.code`
29+
<div q-accordion${sizeAttr}${uncontainedAttr} [defaultValue]="['a']">
30+
${children}
31+
</div>`,
32+
id: "AccordionGroup",
33+
imports: [`import {AccordionModule} from "@qualcomm-ui/angular/accordion"`],
34+
metadata: {nestable: true},
35+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
2+
// SPDX-License-Identifier: BSD-3-Clause-Clear
3+
4+
// url=<FIGMA_COMPONENTS_BASE>?node-id=2161-18192
5+
// component=Accordion
6+
7+
const figma = require("figma")
8+
9+
const instance = figma.selectedInstance
10+
11+
const leftChevron = instance.getEnum("chevron", {left: "left"})
12+
const disabled = instance.getEnum("state", {disabled: true})
13+
const header = instance.getString("headerText") || "Title of accordion"
14+
const icon = instance.getBoolean("icon")
15+
const subHeader = instance.getBoolean("subHeader")
16+
const subHeaderText = instance.getString("subHeaderText")
17+
18+
const disabledAttr = disabled ? " disabled" : ""
19+
const iconAttr = icon ? ` icon="FileChartColumn"` : ""
20+
const secondaryTextAttr =
21+
subHeader && subHeaderText ? ` secondaryText="${subHeaderText}"` : ""
22+
const textAttr = ` text="${header}"`
23+
24+
let example
25+
if (leftChevron) {
26+
const secondaryTextEl =
27+
subHeader && subHeaderText
28+
? `<span q-accordion-item-secondary-text>${subHeaderText}</span>`
29+
: ""
30+
example = figma.code`
31+
<div${disabledAttr} q-accordion-item-root value="a">
32+
<button q-accordion-item-trigger>
33+
<q-accordion-item-indicator />
34+
<span q-accordion-item-text>${header}</span>
35+
${secondaryTextEl}
36+
</button>
37+
<div q-accordion-item-content>Panel contents</div>
38+
</div>`
39+
} else {
40+
example = figma.code`
41+
<div${disabledAttr}${iconAttr} q-accordion-item${secondaryTextAttr}${textAttr} value="a">
42+
Panel contents
43+
</div>`
44+
}
45+
46+
export default {
47+
example,
48+
id: "AccordionItem",
49+
imports: [
50+
`import {AccordionModule} from "@qualcomm-ui/angular/accordion"`,
51+
...(icon && !leftChevron
52+
? [
53+
`import {IconDirective} from "@qualcomm-ui/angular/icon"`,
54+
`import {FileChartColumn} from "lucide-angular"`,
55+
]
56+
: []),
57+
],
58+
metadata: {nestable: true},
59+
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
2+
// SPDX-License-Identifier: BSD-3-Clause-Clear
3+
4+
// url=<FIGMA_COMPONENTS_BASE>?node-id=3566-16209
5+
// component=Alert banner
6+
7+
const figma = require("figma")
8+
9+
const instance = figma.selectedInstance
10+
11+
const emphasis = instance.getEnum("emphasis", {
12+
danger: "danger",
13+
neutral: "neutral",
14+
success: "success",
15+
warning: "warning",
16+
})
17+
const variant = instance.getEnum("variant", {subtle: "subtle"})
18+
const showIcon = instance.getBoolean("showIcon")
19+
const hasButton = instance.getBoolean("button")
20+
const dismissable = instance.getBoolean("dismiss")
21+
const hasDescription = instance.getBoolean("description")
22+
const descriptionText = instance.getString("descriptionText") || "Description"
23+
const heading = instance.getString("heading") || "Notification heading"
24+
25+
const emphasisAttr = emphasis ? ` emphasis="${emphasis}"` : ""
26+
const variantAttr = variant ? ` variant="${variant}"` : ""
27+
28+
const buttonEmphasis = variant
29+
? "neutral"
30+
: emphasis === "warning"
31+
? "black-persistent"
32+
: "white-persistent"
33+
const buttonEl = hasButton
34+
? `
35+
<button
36+
emphasis="${buttonEmphasis}"
37+
q-alert-banner-action
38+
q-button
39+
size="sm"
40+
variant="outline"
41+
>
42+
Button
43+
</button>`
44+
: ""
45+
46+
let example
47+
if (showIcon) {
48+
const descriptionAttr = hasDescription
49+
? ` description="${descriptionText}"`
50+
: ""
51+
const dismissableAttr = dismissable ? " dismissable" : ""
52+
53+
example = figma.code`
54+
<div${dismissableAttr}${emphasisAttr}
55+
heading="${heading}"
56+
q-alert-banner${variantAttr}${descriptionAttr}
57+
>
58+
${buttonEl}
59+
</div>`
60+
} else {
61+
const descriptionEl = hasDescription
62+
? `<div q-alert-banner-description>${descriptionText}</div>`
63+
: ""
64+
const closeButtonEl = dismissable
65+
? `<button q-alert-banner-close-button></button>`
66+
: ""
67+
const buttonActionEl = hasButton
68+
? `
69+
<div q-alert-banner-action>
70+
${buttonEl}
71+
</div>`
72+
: ""
73+
74+
example = figma.code`
75+
<div${emphasisAttr} q-alert-banner-root${variantAttr}>
76+
<div q-alert-banner-heading>${heading}</div>
77+
${descriptionEl}
78+
${buttonActionEl}
79+
${closeButtonEl}
80+
</div>`
81+
}
82+
83+
export default {
84+
example,
85+
id: "AlertBanner",
86+
imports: [
87+
`import {AlertBannerModule} from "@qualcomm-ui/angular/alert-banner"`,
88+
...(hasButton
89+
? [`import {ButtonModule} from "@qualcomm-ui/angular/button"`]
90+
: []),
91+
],
92+
metadata: {nestable: true},
93+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
2+
// SPDX-License-Identifier: BSD-3-Clause-Clear
3+
4+
// url=<FIGMA_COMPONENTS_BASE>?node-id=17804-5308
5+
// component=Avatar
6+
7+
const figma = require("figma")
8+
9+
const instance = figma.selectedInstance
10+
11+
const emphasis = instance.getEnum("emphasis", {
12+
brand: "brand",
13+
"high-contrast": "contrast",
14+
})
15+
const size = instance.getEnum("size", {lg: "lg", sm: "sm", xl: "xl", xs: "xs"})
16+
const status = instance.getBoolean("status")
17+
18+
const emphasisAttr = emphasis ? ` emphasis="${emphasis}"` : ""
19+
const sizeAttr = size ? ` size="${size}"` : ""
20+
const statusAttr = status ? ` status="active"` : ""
21+
const statusEl = status ? `<div q-avatar-status></div>` : ""
22+
23+
export default {
24+
example: figma.code`
25+
<div q-avatar${emphasisAttr}${sizeAttr}${statusAttr}>
26+
<div q-avatar-content>
27+
<svg aria-label="User" qIcon="User"></svg>
28+
</div>
29+
${statusEl}
30+
</div>`,
31+
id: "AvatarIcon",
32+
imports: [
33+
`import {AvatarModule} from "@qualcomm-ui/angular/avatar"`,
34+
`import {IconDirective} from "@qualcomm-ui/angular/icon"`,
35+
`import {User} from "lucide-angular"`,
36+
],
37+
metadata: {nestable: true},
38+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
2+
// SPDX-License-Identifier: BSD-3-Clause-Clear
3+
4+
// url=<FIGMA_COMPONENTS_BASE>?node-id=17804-5726
5+
// component=Avatar
6+
7+
const figma = require("figma")
8+
9+
const instance = figma.selectedInstance
10+
11+
const size = instance.getEnum("size", {lg: "lg", sm: "sm", xl: "xl", xs: "xs"})
12+
const status = instance.getBoolean("status")
13+
14+
const sizeAttr = size ? ` size="${size}"` : ""
15+
const statusAttr = status ? ` status="active"` : ""
16+
const statusEl = status ? `<div q-avatar-status></div>` : ""
17+
18+
export default {
19+
example: figma.code`
20+
<div q-avatar${sizeAttr}${statusAttr}>
21+
<img alt="User avatar" q-avatar-image src="path/to/image.jpg" />
22+
<!-- fallback -->
23+
<div q-avatar-content>O</div>
24+
${statusEl}
25+
</div>`,
26+
id: "AvatarImage",
27+
imports: [`import {AvatarModule} from "@qualcomm-ui/angular/avatar"`],
28+
metadata: {nestable: true},
29+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
2+
// SPDX-License-Identifier: BSD-3-Clause-Clear
3+
4+
// url=<FIGMA_COMPONENTS_BASE>?node-id=17804-5517
5+
// component=Avatar
6+
7+
const figma = require("figma")
8+
9+
const instance = figma.selectedInstance
10+
11+
const emphasis = instance.getEnum("emphasis", {
12+
brand: "brand",
13+
"high-contrast": "contrast",
14+
})
15+
const initialText = instance.getString("initialText")
16+
const size = instance.getEnum("size", {lg: "lg", sm: "sm", xl: "xl", xs: "xs"})
17+
const status = instance.getBoolean("status")
18+
19+
const emphasisAttr = emphasis ? ` emphasis="${emphasis}"` : ""
20+
const sizeAttr = size ? ` size="${size}"` : ""
21+
const statusAttr = status ? ` status="active"` : ""
22+
const statusEl = status ? `<div q-avatar-status></div>` : ""
23+
24+
export default {
25+
example: figma.code`
26+
<div q-avatar${emphasisAttr}${sizeAttr}${statusAttr}>
27+
<div q-avatar-content>${initialText}</div>
28+
${statusEl}
29+
</div>`,
30+
id: "AvatarInitial",
31+
imports: [`import {AvatarModule} from "@qualcomm-ui/angular/avatar"`],
32+
metadata: {nestable: true},
33+
}

0 commit comments

Comments
 (0)