synthos 0.8.0 → 0.9.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/README.md +1 -1
- package/default-pages/application/page.html +42 -0
- package/default-pages/application/page.json +10 -0
- package/default-pages/elevenlabs_effects_studio/page.html +1363 -0
- package/default-pages/elevenlabs_effects_studio/page.json +11 -0
- package/default-pages/elevenlabs_voice_studio/page.html +801 -0
- package/default-pages/elevenlabs_voice_studio/page.json +11 -0
- package/default-pages/{json_tools.html → json_tools/page.html} +13 -11
- package/default-pages/json_tools/page.json +10 -0
- package/default-pages/my_notes/notes/a1b2c3d4-e5f6-7890-abcd-ef1234567890.json +5 -0
- package/default-pages/my_notes/page.html +132 -0
- package/default-pages/{my_notes.json → my_notes/page.json} +2 -2
- package/default-pages/neon_asteroids/files/Ambient_Space.mp3 +0 -0
- package/default-pages/neon_asteroids/files/Ambient_Space2.mp3 +0 -0
- package/default-pages/neon_asteroids/files/Ambient_Space3.mp3 +0 -0
- package/default-pages/neon_asteroids/files/Asteroid_Explosion.mp3 +0 -0
- package/default-pages/neon_asteroids/files/Hyperspace_Jump.mp3 +0 -0
- package/default-pages/neon_asteroids/files/Laser_Fire.mp3 +0 -0
- package/default-pages/neon_asteroids/files/Menu_Navigate.mp3 +0 -0
- package/default-pages/neon_asteroids/files/Power_Up_Collect.mp3 +0 -0
- package/default-pages/neon_asteroids/files/Saucer_Alert.mp3 +0 -0
- package/default-pages/neon_asteroids/files/Ship_Thrust.mp3 +0 -0
- package/default-pages/neon_asteroids/files/effects.json +74 -0
- package/default-pages/neon_asteroids/page.html +1822 -0
- package/default-pages/{neon_asteroids.json → neon_asteroids/page.json} +3 -3
- package/default-pages/{oregon_trail.html → oregon_trail/page.html} +14 -12
- package/default-pages/{oregon_trail.json → oregon_trail/page.json} +2 -2
- package/default-pages/retro_game_starter/page.html +1308 -0
- package/default-pages/retro_game_starter/page.json +12 -0
- package/default-pages/{sidebar_page.html → sidebar_page/page.html} +12 -10
- package/default-pages/sidebar_page/page.json +10 -0
- package/default-pages/{solar_explorer.html → solar_explorer/page.html} +14 -11
- package/default-pages/{solar_explorer.json → solar_explorer/page.json} +2 -2
- package/default-pages/{solar_tutorial.html → solar_tutorial/page.html} +12 -10
- package/default-pages/solar_tutorial/page.json +10 -0
- package/default-pages/{two-panel_page.html → two-panel_page/page.html} +13 -11
- package/default-pages/two-panel_page/page.json +10 -0
- package/default-pages/{us_map.html → us_map/page.html} +193 -192
- package/default-pages/{us_map.json → us_map/page.json} +12 -12
- package/default-pages/{us_map_1850.html → us_map_1850/page.html} +326 -325
- package/default-pages/{us_map_1850.json → us_map_1850/page.json} +12 -12
- package/default-pages/{western_cities_1850.html → western_cities_1850/page.html} +527 -526
- package/default-pages/{western_cities_1850.json → western_cities_1850/page.json} +12 -12
- package/default-themes/aurora-dawn.json +19 -0
- package/default-themes/aurora-dawn.v3.css +198 -0
- package/default-themes/aurora-dusk.json +19 -0
- package/default-themes/aurora-dusk.v3.css +200 -0
- package/default-themes/cosmos-dawn.json +19 -0
- package/default-themes/cosmos-dawn.v3.css +198 -0
- package/default-themes/cosmos-dusk.json +19 -0
- package/default-themes/cosmos-dusk.v3.css +200 -0
- package/default-themes/high-contrast-dark.json +19 -0
- package/default-themes/high-contrast-dark.v3.css +200 -0
- package/default-themes/high-contrast-light.json +19 -0
- package/default-themes/high-contrast-light.v3.css +198 -0
- package/default-themes/nebula-dawn.v2.css +110 -0
- package/default-themes/nebula-dawn.v3.css +199 -0
- package/default-themes/nebula-dusk.v2.css +104 -0
- package/default-themes/nebula-dusk.v3.css +201 -0
- package/default-themes/solar-flare-dawn.json +19 -0
- package/default-themes/solar-flare-dawn.v3.css +198 -0
- package/default-themes/solar-flare-dusk.json +19 -0
- package/default-themes/solar-flare-dusk.v3.css +200 -0
- package/dist/agents/index.d.ts +1 -1
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +2 -1
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/openclaw/gatewayManager.d.ts +4 -0
- package/dist/agents/openclaw/gatewayManager.d.ts.map +1 -1
- package/dist/agents/openclaw/gatewayManager.js +27 -11
- package/dist/agents/openclaw/gatewayManager.js.map +1 -1
- package/dist/agents/openclaw/openclawProvider.d.ts.map +1 -1
- package/dist/agents/openclaw/openclawProvider.js +2 -4
- package/dist/agents/openclaw/openclawProvider.js.map +1 -1
- package/dist/agents/openclaw/sshTunnelManager.d.ts +2 -0
- package/dist/agents/openclaw/sshTunnelManager.d.ts.map +1 -1
- package/dist/agents/openclaw/sshTunnelManager.js +31 -12
- package/dist/agents/openclaw/sshTunnelManager.js.map +1 -1
- package/dist/builders/anthropic.d.ts +31 -0
- package/dist/builders/anthropic.d.ts.map +1 -0
- package/dist/builders/anthropic.js +227 -0
- package/dist/builders/anthropic.js.map +1 -0
- package/dist/builders/fireworksai.d.ts +9 -0
- package/dist/builders/fireworksai.d.ts.map +1 -0
- package/dist/builders/fireworksai.js +57 -0
- package/dist/builders/fireworksai.js.map +1 -0
- package/dist/builders/index.d.ts +13 -0
- package/dist/builders/index.d.ts.map +1 -0
- package/dist/builders/index.js +31 -0
- package/dist/builders/index.js.map +1 -0
- package/dist/builders/openai.d.ts +8 -0
- package/dist/builders/openai.d.ts.map +1 -0
- package/dist/builders/openai.js +87 -0
- package/dist/builders/openai.js.map +1 -0
- package/dist/builders/types.d.ts +54 -0
- package/dist/builders/types.d.ts.map +1 -0
- package/dist/builders/types.js +211 -0
- package/dist/builders/types.js.map +1 -0
- package/dist/connectors/index.d.ts.map +1 -1
- package/dist/connectors/index.js +3 -2
- package/dist/connectors/index.js.map +1 -1
- package/dist/connectors/registry.d.ts +2 -1
- package/dist/connectors/registry.d.ts.map +1 -1
- package/dist/connectors/registry.js +31 -8
- package/dist/connectors/registry.js.map +1 -1
- package/dist/customizer/Customizer.d.ts +57 -0
- package/dist/customizer/Customizer.d.ts.map +1 -0
- package/dist/customizer/Customizer.js +124 -0
- package/dist/customizer/Customizer.js.map +1 -0
- package/dist/customizer/index.d.ts.map +1 -0
- package/dist/customizer/index.js +9 -0
- package/dist/customizer/index.js.map +1 -0
- package/dist/files.d.ts +16 -0
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +60 -1
- package/dist/files.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +10 -6
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +96 -113
- package/dist/init.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +23 -10
- package/dist/migrations.js.map +1 -1
- package/dist/models/anthropic.d.ts +4 -2
- package/dist/models/anthropic.d.ts.map +1 -1
- package/dist/models/anthropic.js +33 -6
- package/dist/models/anthropic.js.map +1 -1
- package/dist/models/fireworksai.d.ts.map +1 -1
- package/dist/models/fireworksai.js +9 -1
- package/dist/models/fireworksai.js.map +1 -1
- package/dist/models/index.d.ts +1 -1
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +2 -1
- package/dist/models/index.js.map +1 -1
- package/dist/models/openai.d.ts +1 -1
- package/dist/models/openai.d.ts.map +1 -1
- package/dist/models/openai.js +24 -3
- package/dist/models/openai.js.map +1 -1
- package/dist/models/types.d.ts +20 -1
- package/dist/models/types.d.ts.map +1 -1
- package/dist/models/types.js +6 -1
- package/dist/models/types.js.map +1 -1
- package/dist/pages.d.ts +30 -7
- package/dist/pages.d.ts.map +1 -1
- package/dist/pages.js +177 -55
- package/dist/pages.js.map +1 -1
- package/dist/service/server.d.ts.map +1 -1
- package/dist/service/server.js +37 -8
- package/dist/service/server.js.map +1 -1
- package/dist/service/transformPage.d.ts +47 -20
- package/dist/service/transformPage.d.ts.map +1 -1
- package/dist/service/transformPage.js +514 -293
- package/dist/service/transformPage.js.map +1 -1
- package/dist/service/useAgentRoutes.d.ts +2 -1
- package/dist/service/useAgentRoutes.d.ts.map +1 -1
- package/dist/service/useAgentRoutes.js +5 -2
- package/dist/service/useAgentRoutes.js.map +1 -1
- package/dist/service/useApiRoutes.d.ts.map +1 -1
- package/dist/service/useApiRoutes.js +237 -136
- package/dist/service/useApiRoutes.js.map +1 -1
- package/dist/service/useConnectorRoutes.js +6 -6
- package/dist/service/useConnectorRoutes.js.map +1 -1
- package/dist/service/useFileRoutes.d.ts +4 -0
- package/dist/service/useFileRoutes.d.ts.map +1 -0
- package/dist/service/useFileRoutes.js +122 -0
- package/dist/service/useFileRoutes.js.map +1 -0
- package/dist/service/usePageRoutes.d.ts.map +1 -1
- package/dist/service/usePageRoutes.js +648 -67
- package/dist/service/usePageRoutes.js.map +1 -1
- package/dist/service/useSharedDataRoutes.d.ts +4 -0
- package/dist/service/useSharedDataRoutes.d.ts.map +1 -0
- package/dist/service/useSharedDataRoutes.js +104 -0
- package/dist/service/useSharedDataRoutes.js.map +1 -0
- package/dist/service/useSharedFileRoutes.d.ts +4 -0
- package/dist/service/useSharedFileRoutes.d.ts.map +1 -0
- package/dist/service/useSharedFileRoutes.js +121 -0
- package/dist/service/useSharedFileRoutes.js.map +1 -0
- package/dist/settings.d.ts +1 -0
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +1 -0
- package/dist/settings.js.map +1 -1
- package/dist/synthos-cli.d.ts.map +1 -1
- package/dist/synthos-cli.js +4 -3
- package/dist/synthos-cli.js.map +1 -1
- package/dist/themes.d.ts +1 -0
- package/dist/themes.d.ts.map +1 -1
- package/dist/themes.js +28 -15
- package/dist/themes.js.map +1 -1
- package/migration-rules/v1-to-v2.md +193 -0
- package/migration-rules/v2-to-v3.md +481 -0
- package/package.json +11 -10
- package/required-pages/builder/page.html +43 -0
- package/required-pages/builder/page.json +10 -0
- package/required-pages/{pages.html → pages/page.html} +238 -233
- package/required-pages/pages/page.json +10 -0
- package/required-pages/{settings.html → settings/page.html} +389 -275
- package/required-pages/settings/page.json +10 -0
- package/required-pages/synthos_apis/page.html +846 -0
- package/required-pages/synthos_apis/page.json +10 -0
- package/required-pages/{synthos_scripts.html → synthos_scripts/page.html} +13 -11
- package/required-pages/synthos_scripts/page.json +10 -0
- package/src/agents/index.ts +1 -1
- package/src/agents/openclaw/gatewayManager.ts +22 -11
- package/src/agents/openclaw/openclawProvider.ts +2 -4
- package/src/agents/openclaw/sshTunnelManager.ts +19 -11
- package/src/builders/anthropic.ts +283 -0
- package/src/builders/fireworksai.ts +59 -0
- package/src/builders/index.ts +33 -0
- package/src/builders/openai.ts +89 -0
- package/src/builders/types.ts +261 -0
- package/src/connectors/index.ts +1 -1
- package/src/connectors/registry.ts +28 -8
- package/src/customizer/Customizer.ts +151 -0
- package/src/customizer/index.ts +5 -0
- package/src/files.ts +57 -0
- package/src/index.ts +2 -1
- package/src/init.ts +137 -123
- package/src/migrations.ts +30 -10
- package/src/models/anthropic.ts +40 -10
- package/src/models/fireworksai.ts +9 -2
- package/src/models/index.ts +1 -1
- package/src/models/openai.ts +26 -6
- package/src/models/types.ts +31 -1
- package/src/pages.ts +176 -54
- package/src/service/server.ts +36 -9
- package/src/service/transformPage.ts +557 -326
- package/src/service/useAgentRoutes.ts +7 -2
- package/src/service/useApiRoutes.ts +150 -41
- package/src/service/useConnectorRoutes.ts +7 -7
- package/src/service/useFileRoutes.ts +127 -0
- package/src/service/usePageRoutes.ts +720 -73
- package/src/service/useSharedDataRoutes.ts +106 -0
- package/src/service/useSharedFileRoutes.ts +126 -0
- package/src/settings.ts +2 -0
- package/src/synthos-cli.ts +4 -3
- package/src/themes.ts +25 -14
- package/static-files/favicon.svg +12 -0
- package/static-files/fluentlm-instructions.llmd +868 -0
- package/static-files/fluentlm-instructions.md +1595 -0
- package/static-files/fluentlm.css +4844 -0
- package/static-files/fluentlm.js +3602 -0
- package/static-files/fluentlm.min.css +1 -0
- package/static-files/fluentlm.min.js +1 -0
- package/{page-scripts/helpers-v2.js → static-files/helpers.v3.js} +82 -0
- package/static-files/page.v3.js +1290 -0
- package/static-files/recommended-frameworks.llmd +81 -0
- package/static-files/recommended-frameworks.md +137 -0
- package/static-files/retro-game.js +877 -0
- package/static-files/shell.css +797 -0
- package/static-files/theme-dark.css +169 -0
- package/static-files/theme-light.css +169 -0
- package/tests/builders.spec.ts +139 -0
- package/tests/pages.spec.ts +8 -8
- package/tests/transformPage.spec.ts +299 -360
- package/default-pages/application.html +0 -40
- package/default-pages/application.json +0 -1
- package/default-pages/json_tools.json +0 -1
- package/default-pages/my_notes.html +0 -33
- package/default-pages/neon_asteroids.html +0 -77
- package/default-pages/sidebar_page.json +0 -1
- package/default-pages/solar_tutorial.json +0 -1
- package/default-pages/two-panel_page.json +0 -1
- package/dist/agents/a2a/a2aProvider.d.ts +0 -3
- package/dist/agents/discovery.d.ts +0 -30
- package/dist/agents/openclaw/openclawProvider.d.ts +0 -3
- package/dist/agents/types.d.ts +0 -64
- package/dist/connectors/index.d.ts +0 -3
- package/dist/connectors/types.d.ts +0 -84
- package/dist/index.d.ts +0 -7
- package/dist/migrations.d.ts +0 -12
- package/dist/models/chainOfThought.d.ts +0 -12
- package/dist/models/fireworksai.d.ts +0 -30
- package/dist/models/logCompletePrompt.d.ts +0 -3
- package/dist/models/providers.d.ts +0 -8
- package/dist/models/utils.d.ts +0 -6
- package/dist/scripts.d.ts +0 -15
- package/dist/service/createCompletePrompt.d.ts +0 -5
- package/dist/service/debugLog.d.ts +0 -11
- package/dist/service/generateImage.d.ts +0 -32
- package/dist/service/index.d.ts +0 -8
- package/dist/service/modelInstructions.d.ts +0 -7
- package/dist/service/requiresSettings.d.ts +0 -3
- package/dist/service/server.d.ts +0 -4
- package/dist/service/useApiRoutes.d.ts +0 -4
- package/dist/service/useConnectorRoutes.d.ts +0 -4
- package/dist/service/useDataRoutes.d.ts +0 -4
- package/dist/service/useGatewayRoutes.d.ts +0 -4
- package/dist/service/useGatewayRoutes.d.ts.map +0 -1
- package/dist/service/useGatewayRoutes.js +0 -168
- package/dist/service/useGatewayRoutes.js.map +0 -1
- package/dist/service/usePageRoutes.d.ts +0 -5
- package/dist/synthos-cli.d.ts +0 -2
- package/page-scripts/page-v2.js +0 -656
- package/required-pages/builder.html +0 -48
- package/required-pages/builder.json +0 -1
- package/required-pages/pages.json +0 -1
- package/required-pages/settings.json +0 -1
- package/required-pages/synthos_apis.html +0 -327
- package/required-pages/synthos_apis.json +0 -1
- package/required-pages/synthos_scripts.json +0 -1
- package/src/connectors/airtable/connector.json +0 -27
- package/src/connectors/alpha-vantage/connector.json +0 -26
- package/src/connectors/brave-search/connector.json +0 -26
- package/src/connectors/cloudinary/connector.json +0 -27
- package/src/connectors/deepl/connector.json +0 -28
- package/src/connectors/elevenlabs/connector.json +0 -30
- package/src/connectors/giphy/connector.json +0 -27
- package/src/connectors/github/connector.json +0 -29
- package/src/connectors/huggingface/connector.json +0 -27
- package/src/connectors/imgur/connector.json +0 -29
- package/src/connectors/instagram/connector.json +0 -43
- package/src/connectors/jira/connector.json +0 -28
- package/src/connectors/mapbox/connector.json +0 -26
- package/src/connectors/nasa/connector.json +0 -27
- package/src/connectors/newsapi/connector.json +0 -27
- package/src/connectors/notion/connector.json +0 -28
- package/src/connectors/open-exchange-rates/connector.json +0 -27
- package/src/connectors/openweathermap/connector.json +0 -26
- package/src/connectors/pexels/connector.json +0 -27
- package/src/connectors/resend/connector.json +0 -29
- package/src/connectors/rss2json/connector.json +0 -27
- package/src/connectors/sendgrid/connector.json +0 -27
- package/src/connectors/spoonacular/connector.json +0 -28
- package/src/connectors/stability-ai/connector.json +0 -27
- package/src/connectors/twilio/connector.json +0 -28
- package/src/connectors/unsplash/connector.json +0 -27
- package/src/connectors/wolfram-alpha/connector.json +0 -26
- package/src/connectors/youtube-data/connector.json +0 -30
- /package/{dist/connectors → service-connectors}/airtable/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/alpha-vantage/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/brave-search/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/cloudinary/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/deepl/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/elevenlabs/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/giphy/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/github/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/huggingface/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/imgur/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/instagram/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/jira/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/mapbox/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/nasa/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/newsapi/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/notion/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/open-exchange-rates/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/openweathermap/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/pexels/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/resend/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/rss2json/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/sendgrid/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/spoonacular/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/stability-ai/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/twilio/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/unsplash/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/wolfram-alpha/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/youtube-data/connector.json +0 -0
|
@@ -0,0 +1,868 @@
|
|
|
1
|
+
@fluentlm__component_reference
|
|
2
|
+
Compact reference LLM-driven HTML generation. component shows 1–3 examples followed class list
|
|
3
|
+
@global_classes
|
|
4
|
+
Apply element
|
|
5
|
+
:_cols=class¦effect
|
|
6
|
+
flm-text--secondary¦Color: --bodySubtext
|
|
7
|
+
flm-text--disabled¦Color: --disabledText
|
|
8
|
+
flm-text--error¦Color: --errorText
|
|
9
|
+
flm-text--success¦Color: --successText
|
|
10
|
+
flm-text--nowrap¦Truncate ellipsis
|
|
11
|
+
flm-text--block¦display: block
|
|
12
|
+
flm-text--semibold¦Weight 600
|
|
13
|
+
flm-text--bold¦Weight 700
|
|
14
|
+
flm-sr-only¦Visually hidden, screen-reader accessible
|
|
15
|
+
@global_implementation_notes
|
|
16
|
+
Auto-wired JS handlers — Nav, Pivot, Dialog, Panel, Modal, Callout, Dropdown, ComboBox, SpinButton, SwatchColorPicker, GroupedList, MessageBar, Toggle, Rating, SearchBox, TagPicker, DatePicker, TimePicker, Coachmark, and TeachingBubble components implement own click/interaction handlers via fluentlm.js. Do not duplicate page scripts
|
|
17
|
+
Theme switching — Use FluentLM.setTheme('dark') / FluentLM.setTheme('light'), or toggle fluent-dark class <html>. Do not use data-theme attributes
|
|
18
|
+
CSS variables — Use only FluentLM semantic tokens documented CSS Custom Properties section below (e.g. --bodyText, --bodyBackground). Do not use Fluent UI v2 variable names (e.g. --colorNeutralForeground1). Important: custom styles (hover states, backgrounds, borders, text colors), always use Semantic Colors variables (e.g. --bodyBackground, --defaultStateBackground, --bodySubtext) instead Palette Colors variables (e.g. --neutralLighter, --neutralLight). Palette colors fixed values do not change light and dark themes, so using will produce incorrect colors one theme or
|
|
19
|
+
CSS load order — base CSS file must always be included before any theme files
|
|
20
|
+
Icons — element data-icon="Name" attribute gets inline SVG injected JS. Works .flm-icon elements, empty <i> / <span> tags, buttons, and links
|
|
21
|
+
@button
|
|
22
|
+
::html
|
|
23
|
+
<<<
|
|
24
|
+
<button class="flm-button">Default</button> <button class="flm-button flm-button--primary" data-icon="Save">Save</button> <button class="flm-button flm-button--icon" data-icon="Settings" aria-label="Settings"></button>
|
|
25
|
+
>>>
|
|
26
|
+
:_cols=class¦effect
|
|
27
|
+
flm-button¦Base button
|
|
28
|
+
flm-button--primary¦Brand-colored fill
|
|
29
|
+
flm-button--compound¦Two-line button (needs .flm-button-label + .flm-button-description children)
|
|
30
|
+
flm-button--icon¦Icon-only, square (requires aria-label)
|
|
31
|
+
flm-button--subtle¦No border, transparent background
|
|
32
|
+
:_cols=attribute¦effect
|
|
33
|
+
data-icon="Name"¦JS injects icon before label
|
|
34
|
+
data-split¦JS adds dropdown caret
|
|
35
|
+
disabled¦Native disabled state
|
|
36
|
+
:_cols=child_class¦where
|
|
37
|
+
flm-button-label¦Primary text compound button
|
|
38
|
+
flm-button-description¦Secondary text compound button
|
|
39
|
+
@text
|
|
40
|
+
::html
|
|
41
|
+
<<<
|
|
42
|
+
<span class="flm-text">Default (medium)</span> <span class="flm-text flm-text--xLarge">Heading</span> <p class="flm-text flm-text--small flm-text--secondary flm-text--block">Caption paragraph.</p>
|
|
43
|
+
>>>
|
|
44
|
+
:_cols=class¦size
|
|
45
|
+
flm-text--tiny¦10px
|
|
46
|
+
flm-text--xSmall¦10px
|
|
47
|
+
flm-text--small¦12px
|
|
48
|
+
flm-text--smallPlus¦12px
|
|
49
|
+
flm-text--medium¦14px (default)
|
|
50
|
+
flm-text--mediumPlus¦16px
|
|
51
|
+
flm-text--large¦18px
|
|
52
|
+
flm-text--xLarge¦20px / semibold
|
|
53
|
+
flm-text--xxLarge¦28px / semibold
|
|
54
|
+
flm-text--superLarge¦42px / semibold
|
|
55
|
+
flm-text--mega¦68px / semibold
|
|
56
|
+
@label
|
|
57
|
+
::html
|
|
58
|
+
<<<
|
|
59
|
+
<label class="flm-label" for="f1">Name</label> <label class="flm-label flm-label--required" for="f2">Email</label>
|
|
60
|
+
>>>
|
|
61
|
+
:_cols=class¦effect
|
|
62
|
+
flm-label¦Base label
|
|
63
|
+
flm-label--required¦Adds red asterisk
|
|
64
|
+
flm-label--disabled¦Dimmed text
|
|
65
|
+
@link
|
|
66
|
+
::html
|
|
67
|
+
<<<
|
|
68
|
+
<a class="flm-link" href="/page">Go to page</a>
|
|
69
|
+
>>>
|
|
70
|
+
:_cols=class¦effect
|
|
71
|
+
flm-link¦Base link
|
|
72
|
+
flm-link--disabled¦Dimmed, no pointer events
|
|
73
|
+
@icon
|
|
74
|
+
::html
|
|
75
|
+
<<<
|
|
76
|
+
<i class="flm-icon" data-icon="Mail"></i> <i class="flm-icon flm-icon--large" data-icon="ChevronDown"></i>
|
|
77
|
+
>>>
|
|
78
|
+
:_cols=class¦size
|
|
79
|
+
flm-icon--small¦12px
|
|
80
|
+
(default)¦16px
|
|
81
|
+
flm-icon--large¦20px
|
|
82
|
+
:_cols=attribute¦effect
|
|
83
|
+
data-icon="Name"¦JS resolves SVG/glyph
|
|
84
|
+
@textfield
|
|
85
|
+
::html
|
|
86
|
+
<<<
|
|
87
|
+
<div class="flm-textfield"> <label class="flm-label" for="f1">Name</label> <input class="flm-textfield-input" id="f1" placeholder="Enter name"> </div> <div class="flm-textfield flm-textfield--error"> <label class="flm-label" for="f2">Age</label> <input class="flm-textfield-input" id="f2" value="-1"> <span class="flm-textfield-error">Must be positive</span> </div> <div class="flm-textfield"> <label class="flm-label" for="f3">Notes</label> <textarea class="flm-textfield-input" id="f3" rows="4"></textarea> </div>
|
|
88
|
+
>>>
|
|
89
|
+
:_cols=class¦effect
|
|
90
|
+
flm-textfield¦Base wrapper
|
|
91
|
+
flm-textfield--required¦Required field styling
|
|
92
|
+
flm-textfield--error¦Error border + enables .flm-textfield-error
|
|
93
|
+
flm-textfield--disabled¦Dimmed, pair disabled input
|
|
94
|
+
flm-textfield--underlined¦Bottom border only
|
|
95
|
+
flm-textfield--borderless¦No border
|
|
96
|
+
:_cols=child_class¦element
|
|
97
|
+
flm-textfield-input¦<input> or <textarea>
|
|
98
|
+
flm-textfield-error¦<span> error message
|
|
99
|
+
flm-textfield-wrapper¦<div> wraps input when using prefix/suffix
|
|
100
|
+
flm-textfield-prefix¦<span> before input
|
|
101
|
+
flm-textfield-suffix¦<span> after input
|
|
102
|
+
@checkbox
|
|
103
|
+
::html
|
|
104
|
+
<<<
|
|
105
|
+
<label class="flm-checkbox"> <input type="checkbox" class="flm-checkbox-input"> <span class="flm-checkbox-mark"></span> <span class="flm-checkbox-label">Accept terms</span> </label>
|
|
106
|
+
>>>
|
|
107
|
+
:_cols=class¦effect
|
|
108
|
+
flm-checkbox¦Base wrapper <label>)
|
|
109
|
+
flm-checkbox--disabled¦Dimmed, pair disabled input
|
|
110
|
+
:_cols=child_class¦element
|
|
111
|
+
flm-checkbox-input¦Hidden native <input type="checkbox">
|
|
112
|
+
flm-checkbox-mark¦Visual checkmark box
|
|
113
|
+
flm-checkbox-label¦Text label
|
|
114
|
+
:native=checked, disabled, indeterminate (via JS).
|
|
115
|
+
@toggle
|
|
116
|
+
::html
|
|
117
|
+
<<<
|
|
118
|
+
<label class="flm-toggle"> <span class="flm-toggle-label">Notifications</span> <input type="checkbox" class="flm-toggle-input"> <span class="flm-toggle-track"><span class="flm-toggle-thumb"></span></span> <span class="flm-toggle-state" data-on="On" data-off="Off"></span> </label>
|
|
119
|
+
>>>
|
|
120
|
+
:_cols=class¦effect
|
|
121
|
+
flm-toggle¦Base wrapper <label>)
|
|
122
|
+
flm-toggle--disabled¦Dimmed, pair disabled input
|
|
123
|
+
flm-toggle--inline¦Label and track line
|
|
124
|
+
:_cols=child_class¦element
|
|
125
|
+
flm-toggle-input¦Hidden native <input type="checkbox">
|
|
126
|
+
flm-toggle-label¦Text label
|
|
127
|
+
flm-toggle-track¦Sliding rail
|
|
128
|
+
flm-toggle-thumb¦Circle knob inside track
|
|
129
|
+
flm-toggle-state¦Shows data-on/data-off text based state
|
|
130
|
+
@dropdown
|
|
131
|
+
::html
|
|
132
|
+
<<<
|
|
133
|
+
<div class="flm-dropdown"> <label class="flm-label">Country</label> <button class="flm-dropdown-trigger"> <span class="flm-dropdown-title flm-dropdown-title--placeholder">Select...</span> <span class="flm-dropdown-caret" data-icon="ChevronDown"></span> </button> <div class="flm-dropdown-listbox"> <div class="flm-dropdown-option" data-value="us">United States</div> <div class="flm-dropdown-option" data-value="gb">United Kingdom</div> </div> </div>
|
|
134
|
+
>>>
|
|
135
|
+
:_cols=class¦effect
|
|
136
|
+
flm-dropdown¦Container
|
|
137
|
+
flm-dropdown--disabled¦Disabled state
|
|
138
|
+
flm-dropdown--error¦Error border
|
|
139
|
+
:_cols=attribute¦effect
|
|
140
|
+
data-value="val"¦On .flm-dropdown-option — option value. Auto-set root when selected
|
|
141
|
+
:_cols=child_class¦element
|
|
142
|
+
flm-dropdown-trigger¦Clickable button (styled like ComboBox wrapper)
|
|
143
|
+
flm-dropdown-title¦Selected text display
|
|
144
|
+
flm-dropdown-title--placeholder¦Placeholder color
|
|
145
|
+
flm-dropdown-caret¦Chevron icon
|
|
146
|
+
flm-dropdown-listbox¦Options popup
|
|
147
|
+
flm-dropdown-option¦Individual option
|
|
148
|
+
flm-dropdown-option--selected¦Selected option
|
|
149
|
+
flm-dropdown-option--disabled¦Disabled option
|
|
150
|
+
flm-dropdown-value¦Hidden <input> form submission (optional)
|
|
151
|
+
flm-dropdown-error¦<span> error message
|
|
152
|
+
:js=keyboard nav (ArrowUp/Down/Enter/Space/Escape), click-outside dismiss, flip-above.
|
|
153
|
+
@stack
|
|
154
|
+
::html
|
|
155
|
+
<<<
|
|
156
|
+
<div class="flm-stack" style="gap: var(--spacingS1)"> <div>Row 1</div> <div>Row 2</div> </div> <div class="flm-stack flm-stack--horizontal" style="gap: var(--spacingM)"> <div class="flm-stack-item flm-stack-item--grow">Fills space</div> <div>Fixed</div> </div>
|
|
157
|
+
>>>
|
|
158
|
+
:_cols=class¦effect
|
|
159
|
+
flm-stack¦Vertical flexbox (default)
|
|
160
|
+
flm-stack--horizontal¦Row direction
|
|
161
|
+
flm-stack--center¦Center axes
|
|
162
|
+
flm-stack--end¦Align end
|
|
163
|
+
flm-stack--space-between¦Space items
|
|
164
|
+
flm-stack--wrap¦Allow wrapping
|
|
165
|
+
:_cols=child_class¦effect
|
|
166
|
+
flm-stack-item--grow¦flex-grow: 1
|
|
167
|
+
flm-stack-item--shrink¦flex-shrink: 1
|
|
168
|
+
flm-stack-item--align-end¦Self-align end
|
|
169
|
+
flm-stack-item--align-center¦Self-align center
|
|
170
|
+
Inline style="gap: var(--spacingS1)" sets spacing per instance
|
|
171
|
+
@separator
|
|
172
|
+
::html
|
|
173
|
+
<<<
|
|
174
|
+
<hr class="flm-separator"> <hr class="flm-separator flm-separator--vertical">
|
|
175
|
+
>>>
|
|
176
|
+
:_cols=class¦effect
|
|
177
|
+
flm-separator¦Horizontal line
|
|
178
|
+
flm-separator--vertical¦Vertical line (use horizontal stacks)
|
|
179
|
+
@spinner
|
|
180
|
+
::html
|
|
181
|
+
<<<
|
|
182
|
+
<div class="flm-spinner"><div class="flm-spinner-circle"></div></div> <div class="flm-spinner flm-spinner--large"> <div class="flm-spinner-circle"></div> <span class="flm-spinner-label">Loading...</span> </div>
|
|
183
|
+
>>>
|
|
184
|
+
:_cols=class¦size
|
|
185
|
+
flm-spinner--xSmall¦12px
|
|
186
|
+
flm-spinner--small¦16px
|
|
187
|
+
(default)¦20px
|
|
188
|
+
flm-spinner--large¦28px
|
|
189
|
+
:_cols=child_class¦element
|
|
190
|
+
flm-spinner-circle¦Animated ring
|
|
191
|
+
flm-spinner-label¦Optional text label
|
|
192
|
+
@messagebar
|
|
193
|
+
::html
|
|
194
|
+
<<<
|
|
195
|
+
<div class="flm-messagebar flm-messagebar--success">Operation completed.</div> <div class="flm-messagebar flm-messagebar--error">Something went wrong.</div>
|
|
196
|
+
>>>
|
|
197
|
+
:_cols=class¦type
|
|
198
|
+
flm-messagebar--info¦Neutral info (default)
|
|
199
|
+
flm-messagebar--success¦Green success
|
|
200
|
+
flm-messagebar--warning¦Yellow warning
|
|
201
|
+
flm-messagebar--severeWarning¦Orange severe warning
|
|
202
|
+
flm-messagebar--error¦Red error
|
|
203
|
+
flm-messagebar--blocked¦Red blocked
|
|
204
|
+
:_cols=child_class¦element
|
|
205
|
+
flm-messagebar-icon¦Leading icon (auto-injected JS if absent)
|
|
206
|
+
flm-messagebar-text¦Message content
|
|
207
|
+
flm-messagebar-actions¦Action buttons container
|
|
208
|
+
flm-messagebar-dismiss¦Dismiss/close button
|
|
209
|
+
@dialog
|
|
210
|
+
::html
|
|
211
|
+
<<<
|
|
212
|
+
<div class="flm-dialog-overlay" id="dlg1" data-light-dismiss> <div class="flm-dialog"> <div class="flm-dialog-header"> <h2 class="flm-dialog-title">Confirm</h2> <button class="flm-dialog-close" data-icon="Cancel" aria-label="Close"></button> </div> <div class="flm-dialog-body">Are you sure?</div> <div class="flm-dialog-footer"> <button class="flm-button" data-dialog-close>Cancel</button> <button class="flm-button flm-button--primary" data-dialog-close>OK</button> </div> </div> </div> <button class="flm-button" data-dialog-open="dlg1">Open Dialog</button>
|
|
213
|
+
>>>
|
|
214
|
+
:_cols=class¦effect
|
|
215
|
+
flm-dialog-overlay¦Full-screen overlay container (give id)
|
|
216
|
+
flm-dialog¦The dialog box
|
|
217
|
+
flm-dialog--large-header¦Larger title font
|
|
218
|
+
:_cols=attribute¦effect
|
|
219
|
+
data-dialog-open="id"¦On trigger button — opens dialog
|
|
220
|
+
data-dialog-close¦On button — closes containing dialog
|
|
221
|
+
data-light-dismiss¦On overlay — click outside close
|
|
222
|
+
:_cols=child_class¦element
|
|
223
|
+
flm-dialog-header¦Header row
|
|
224
|
+
flm-dialog-title¦<h2> title
|
|
225
|
+
flm-dialog-close¦Close X button
|
|
226
|
+
flm-dialog-body¦Content area
|
|
227
|
+
flm-dialog-footer¦Action buttons row
|
|
228
|
+
Implementation note: When embedding Dropdown, ComboBox, or popup-based component inside Dialog, Modal, or Panel, add overflow: visible dialog/modal container (.flm-dialog, .flm-modal) and body (.flm-dialog-body, .flm-panel-body) so dropdown listbox not clipped
|
|
229
|
+
@panel
|
|
230
|
+
::html
|
|
231
|
+
<<<
|
|
232
|
+
<div class="flm-panel-overlay"></div> <div class="flm-panel" id="panel1"> <div class="flm-panel-header"> <h2 class="flm-panel-title">Settings</h2> <button class="flm-panel-close" data-icon="Cancel" aria-label="Close"></button> </div> <div class="flm-panel-body">Panel content here.</div> <div class="flm-panel-footer"> <button class="flm-button flm-button--primary" data-panel-close>Save</button> </div> </div> <button class="flm-button" data-panel-open="panel1">Open Panel</button>
|
|
233
|
+
>>>
|
|
234
|
+
:_cols=class¦effect
|
|
235
|
+
flm-panel¦Slide-in container (give id)
|
|
236
|
+
flm-panel--small¦272px width
|
|
237
|
+
flm-panel--medium¦592px width
|
|
238
|
+
flm-panel--large¦940px width
|
|
239
|
+
flm-panel--extraLarge¦1200px width
|
|
240
|
+
flm-panel--fluid¦100% width
|
|
241
|
+
flm-panel--left¦Slides left instead right
|
|
242
|
+
:_cols=attribute¦effect
|
|
243
|
+
data-panel-open="id"¦On trigger — opens panel
|
|
244
|
+
data-panel-close¦On button — closes containing panel
|
|
245
|
+
:_cols=child_class¦element
|
|
246
|
+
flm-panel-header¦Header row
|
|
247
|
+
flm-panel-title¦<h2> title
|
|
248
|
+
flm-panel-close¦Close X button
|
|
249
|
+
flm-panel-body¦Scrollable content
|
|
250
|
+
flm-panel-footer¦Actions row (sticky bottom)
|
|
251
|
+
@modal
|
|
252
|
+
::html
|
|
253
|
+
<<<
|
|
254
|
+
<div class="flm-modal-overlay" id="modal1" data-light-dismiss> <div class="flm-modal" style="width: 480px; padding: var(--spacingL1);"> Content here <button class="flm-button" data-modal-close>Close</button> </div> </div> <button class="flm-button" data-modal-open="modal1">Open Modal</button>
|
|
255
|
+
>>>
|
|
256
|
+
:_cols=class¦effect
|
|
257
|
+
flm-modal-overlay¦Full-screen overlay (give id)
|
|
258
|
+
flm-modal¦Centered content box
|
|
259
|
+
:_cols=attribute¦effect
|
|
260
|
+
data-modal-open="id"¦Opens modal
|
|
261
|
+
data-modal-close¦Closes containing modal
|
|
262
|
+
data-light-dismiss¦On overlay — click outside close
|
|
263
|
+
data-blocking¦On overlay — prevents Escape/click dismiss
|
|
264
|
+
@callout
|
|
265
|
+
::html
|
|
266
|
+
<<<
|
|
267
|
+
<button class="flm-button" data-callout-toggle="co1">Show Info</button> <div class="flm-callout" id="co1"> <div class="flm-callout-beak"></div> <div class="flm-callout-body">Callout content here.</div> </div>
|
|
268
|
+
>>>
|
|
269
|
+
:_cols=class¦effect
|
|
270
|
+
flm-callout¦Positioned popup (give id)
|
|
271
|
+
:_cols=attribute¦effect
|
|
272
|
+
data-callout-toggle="id"¦Toggle callout visibility
|
|
273
|
+
:_cols=child_class¦element
|
|
274
|
+
flm-callout-beak¦Arrow pointing target
|
|
275
|
+
flm-callout-body¦Content area
|
|
276
|
+
@commandbar
|
|
277
|
+
::html
|
|
278
|
+
<<<
|
|
279
|
+
<div class="flm-commandbar"> <div class="flm-commandbar-items"> <button class="flm-commandbar-item" data-icon="Add">New</button> <button class="flm-commandbar-item" data-icon="Edit">Edit</button> <span class="flm-commandbar-divider"></span> <button class="flm-commandbar-item" data-icon="Delete">Delete</button> </div> <div class="flm-commandbar-far"> <button class="flm-commandbar-item" data-icon="Filter">Filter</button> </div> </div>
|
|
280
|
+
>>>
|
|
281
|
+
:_cols=class¦element
|
|
282
|
+
flm-commandbar¦Toolbar container
|
|
283
|
+
flm-commandbar-items¦Left-side items
|
|
284
|
+
flm-commandbar-far¦Right-side items
|
|
285
|
+
flm-commandbar-item¦Individual command button
|
|
286
|
+
flm-commandbar-divider¦Vertical separator
|
|
287
|
+
flm-commandbar-overflow¦Overflow "..." button
|
|
288
|
+
:_cols=attribute¦effect
|
|
289
|
+
data-icon="Name"¦Icon before label
|
|
290
|
+
disabled¦Disabled state
|
|
291
|
+
Implementation note: When embedding Dropdown or popup-based component inside CommandBar, add overflow: visible .flm-commandbar and .flm-commandbar-items so dropdown listbox not clipped
|
|
292
|
+
@nav
|
|
293
|
+
::html
|
|
294
|
+
<<<
|
|
295
|
+
<nav class="flm-nav"> <!-- Expanded group --> <div class="flm-nav-group"> <button class="flm-nav-group-header"> <i class="flm-nav-chevron flm-nav-chevron--expanded" data-icon="ChevronRight"></i> Section </button> <div class="flm-nav-group-items"> <a class="flm-nav-link flm-nav-link--active" href="#">Home</a> <a class="flm-nav-link" href="#">Settings</a> <a class="flm-nav-link flm-nav-link--disabled">Disabled</a> </div> </div> <!-- Collapsed group: put --collapsed on flm-nav-group-items, omit --expanded on chevron --> <div class="flm-nav-group"> <button class="flm-nav-group-header"> <i class="flm-nav-chevron" data-icon="ChevronRight"></i> Collapsed Section </button> <div class="flm-nav-group-items flm-nav-group-items--collapsed"> <a class="flm-nav-link" href="#">Hidden Link</a> </div> </div> </nav>
|
|
296
|
+
>>>
|
|
297
|
+
:_cols=class¦effect
|
|
298
|
+
flm-nav¦Nav container
|
|
299
|
+
flm-nav-group¦Section group
|
|
300
|
+
flm-nav-group-header¦Collapsible group title
|
|
301
|
+
flm-nav-group-items¦Links container
|
|
302
|
+
flm-nav-group-items--collapsed¦Hidden (toggled JS). Apply .flm-nav-group-items, NOT parent group
|
|
303
|
+
flm-nav-link¦Navigation link
|
|
304
|
+
flm-nav-link--active¦Active/selected link
|
|
305
|
+
flm-nav-link--disabled¦Disabled link
|
|
306
|
+
flm-nav-link--nested¦Extra indentation
|
|
307
|
+
flm-nav-chevron¦Expand/collapse icon
|
|
308
|
+
flm-nav-chevron--expanded¦Rotated 90deg
|
|
309
|
+
@breadcrumb
|
|
310
|
+
::html
|
|
311
|
+
<<<
|
|
312
|
+
<ol class="flm-breadcrumb"> <li class="flm-breadcrumb-item"><a class="flm-breadcrumb-link" href="#">Home</a></li> <li class="flm-breadcrumb-item"><a class="flm-breadcrumb-link" href="#">Library</a></li> <li class="flm-breadcrumb-item"><a class="flm-breadcrumb-link">Current Page</a></li> </ol>
|
|
313
|
+
>>>
|
|
314
|
+
:_cols=class¦effect
|
|
315
|
+
flm-breadcrumb¦<ol> container
|
|
316
|
+
flm-breadcrumb--small¦Smaller font
|
|
317
|
+
flm-breadcrumb--large¦Larger font + semibold
|
|
318
|
+
flm-breadcrumb-item¦<li> wrapper
|
|
319
|
+
flm-breadcrumb-link¦Clickable text
|
|
320
|
+
flm-breadcrumb-overflow¦"..." overflow button
|
|
321
|
+
@pivot
|
|
322
|
+
::html
|
|
323
|
+
<<<
|
|
324
|
+
<div class="flm-pivot"> <div class="flm-pivot-tabs" role="tablist"> <button class="flm-pivot-tab flm-pivot-tab--active" data-panel="p1" role="tab">Tab 1</button> <button class="flm-pivot-tab" data-panel="p2" role="tab">Tab 2</button> <button class="flm-pivot-tab flm-pivot-tab--disabled" role="tab">Disabled</button> </div> <div class="flm-pivot-panel flm-pivot-panel--active" id="p1" role="tabpanel">Content 1</div> <div class="flm-pivot-panel" id="p2" role="tabpanel">Content 2</div> </div>
|
|
325
|
+
>>>
|
|
326
|
+
:_cols=class¦effect
|
|
327
|
+
flm-pivot¦Container
|
|
328
|
+
flm-pivot--links¦Link-style tabs (wider padding)
|
|
329
|
+
flm-pivot--tabs¦Filled tab style
|
|
330
|
+
flm-pivot-tabs¦Tab bar
|
|
331
|
+
flm-pivot-tab¦Individual tab button
|
|
332
|
+
flm-pivot-tab--active¦Selected tab
|
|
333
|
+
flm-pivot-tab--disabled¦Disabled tab
|
|
334
|
+
flm-pivot-panel¦Content panel
|
|
335
|
+
flm-pivot-panel--active¦Visible panel
|
|
336
|
+
:_cols=attribute¦effect
|
|
337
|
+
data-panel="id"¦Links tab panel id
|
|
338
|
+
@detailslist
|
|
339
|
+
::html
|
|
340
|
+
<<<
|
|
341
|
+
<div class="flm-detailslist"> <div class="flm-detailslist-header"> <div class="flm-detailslist-check"><label class="flm-checkbox"><input type="checkbox" class="flm-checkbox-input"><span class="flm-checkbox-mark"></span></label></div> <div class="flm-detailslist-header-cell" style="width: 200px;">Name</div> <div class="flm-detailslist-header-cell" style="width: 120px;">Status</div> <div class="flm-detailslist-header-cell" style="flex: 1;">Date</div> </div> <div class="flm-detailslist-row"> <div class="flm-detailslist-check"><label class="flm-checkbox"><input type="checkbox" class="flm-checkbox-input"><span class="flm-checkbox-mark"></span></label></div> <div class="flm-detailslist-cell" style="width: 200px;">Document.pdf</div> <div class="flm-detailslist-cell" style="width: 120px;">Active</div> <div class="flm-detailslist-cell" style="flex: 1;">Feb 20, 2026</div> </div> </div>
|
|
342
|
+
>>>
|
|
343
|
+
:_cols=class¦effect
|
|
344
|
+
flm-detailslist¦Table container
|
|
345
|
+
flm-detailslist--compact¦Reduced row height (32px)
|
|
346
|
+
flm-detailslist-header¦Header row
|
|
347
|
+
flm-detailslist-header-cell¦Column header
|
|
348
|
+
flm-detailslist-row¦Data row
|
|
349
|
+
flm-detailslist-row--selected¦Selected row highlight
|
|
350
|
+
flm-detailslist-cell¦Data cell
|
|
351
|
+
flm-detailslist-check¦Row checkbox column
|
|
352
|
+
flm-detailslist-empty¦Empty state message
|
|
353
|
+
Set column widths via inline style="width: 200px" or style="flex: 1"
|
|
354
|
+
@searchbox
|
|
355
|
+
::html
|
|
356
|
+
<<<
|
|
357
|
+
<div class="flm-searchbox"> <input class="flm-searchbox-input" type="text" placeholder="Search..."> </div>
|
|
358
|
+
>>>
|
|
359
|
+
:_cols=class¦effect
|
|
360
|
+
flm-searchbox¦Container (JS injects icon + clear btn)
|
|
361
|
+
flm-searchbox--underlined¦Bottom border only
|
|
362
|
+
flm-searchbox--disabled¦Disabled state
|
|
363
|
+
:_cols=child_class¦element
|
|
364
|
+
flm-searchbox-input¦<input type="text">
|
|
365
|
+
flm-searchbox-icon¦Search icon (auto-injected)
|
|
366
|
+
flm-searchbox-clear¦Clear button (auto-injected)
|
|
367
|
+
@contextualmenu
|
|
368
|
+
::html
|
|
369
|
+
<<<
|
|
370
|
+
<button class="flm-button" data-contextmenu-toggle="menu1">Menu</button> <div class="flm-contextmenu" id="menu1"> <div class="flm-contextmenu-header">Actions</div> <button class="flm-contextmenu-item"><span class="flm-contextmenu-item-text">Edit</span></button> <button class="flm-contextmenu-item"><span class="flm-contextmenu-item-text">Copy</span></button> <div class="flm-contextmenu-divider"></div> <button class="flm-contextmenu-item" disabled><span class="flm-contextmenu-item-text">Delete</span></button> </div>
|
|
371
|
+
>>>
|
|
372
|
+
:_cols=class¦effect
|
|
373
|
+
flm-contextmenu¦Menu container (give id)
|
|
374
|
+
flm-contextmenu-item¦Menu item button
|
|
375
|
+
flm-contextmenu-item--checked¦Shows checkmark
|
|
376
|
+
flm-contextmenu-divider¦Horizontal rule
|
|
377
|
+
flm-contextmenu-header¦Section header
|
|
378
|
+
:_cols=attribute¦effect
|
|
379
|
+
data-contextmenu-toggle="id"¦Click trigger
|
|
380
|
+
data-contextmenu="id"¦Right-click trigger
|
|
381
|
+
disabled¦Disabled item
|
|
382
|
+
:_cols=child_class¦element
|
|
383
|
+
flm-contextmenu-item-icon¦Leading icon
|
|
384
|
+
flm-contextmenu-item-text¦Item label
|
|
385
|
+
flm-contextmenu-item-submenu¦Submenu chevron
|
|
386
|
+
@progressindicator
|
|
387
|
+
::html
|
|
388
|
+
<<<
|
|
389
|
+
<div class="flm-progress"> <span class="flm-progress-label">Uploading...</span> <div class="flm-progress-track"><div class="flm-progress-bar" style="width: 60%"></div></div> <span class="flm-progress-description">60% complete</span> </div> <div class="flm-progress flm-progress--indeterminate"> <div class="flm-progress-track"><div class="flm-progress-bar"></div></div> </div>
|
|
390
|
+
>>>
|
|
391
|
+
:_cols=class¦effect
|
|
392
|
+
flm-progress¦Container
|
|
393
|
+
flm-progress--indeterminate¦Animated looping bar
|
|
394
|
+
:_cols=child_class¦element
|
|
395
|
+
flm-progress-label¦Title text
|
|
396
|
+
flm-progress-track¦Background rail
|
|
397
|
+
flm-progress-bar¦Filled portion (set width via style)
|
|
398
|
+
flm-progress-description¦Subtitle text
|
|
399
|
+
@tooltip
|
|
400
|
+
::html
|
|
401
|
+
<<<
|
|
402
|
+
<span data-tooltip="Helpful info">Hover me</span>
|
|
403
|
+
>>>
|
|
404
|
+
:_cols=class¦effect
|
|
405
|
+
flm-tooltip-host¦Explicit wrapper (optional — data-tooltip element works)
|
|
406
|
+
flm-tooltip¦Tooltip box pre-defined rich tooltips)
|
|
407
|
+
:_cols=attribute¦effect
|
|
408
|
+
data-tooltip="text"¦Simple text tooltip (auto-created JS)
|
|
409
|
+
data-tooltip-id="id"¦References pre-defined .flm-tooltip element
|
|
410
|
+
@persona
|
|
411
|
+
::html
|
|
412
|
+
<<<
|
|
413
|
+
<div class="flm-persona flm-persona--size40"> <div class="flm-persona-coin flm-persona-presence flm-persona-presence--available">JD</div> <div class="flm-persona-details"> <span class="flm-persona-name">Jane Doe</span> <span class="flm-persona-secondary">Software Engineer</span> </div> </div>
|
|
414
|
+
>>>
|
|
415
|
+
:_cols=class¦size
|
|
416
|
+
flm-persona--size24¦24px (default)
|
|
417
|
+
flm-persona--size32¦32px
|
|
418
|
+
flm-persona--size40¦40px
|
|
419
|
+
flm-persona--size48¦48px
|
|
420
|
+
flm-persona--size56¦56px
|
|
421
|
+
flm-persona--size72¦72px
|
|
422
|
+
flm-persona--size100¦100px
|
|
423
|
+
flm-persona--size120¦120px
|
|
424
|
+
:_cols=presence_class¦status
|
|
425
|
+
flm-persona-presence--available¦Green
|
|
426
|
+
flm-persona-presence--away¦Yellow
|
|
427
|
+
flm-persona-presence--busy¦Red
|
|
428
|
+
flm-persona-presence--dnd¦Red
|
|
429
|
+
flm-persona-presence--offline¦Gray
|
|
430
|
+
:_cols=child_class¦element
|
|
431
|
+
flm-persona-coin¦Avatar circle (initials or <img>)
|
|
432
|
+
flm-persona-details¦Text wrapper
|
|
433
|
+
flm-persona-name¦Primary name
|
|
434
|
+
flm-persona-secondary¦Title / role
|
|
435
|
+
flm-persona-tertiary¦Additional info
|
|
436
|
+
@image
|
|
437
|
+
::html
|
|
438
|
+
<<<
|
|
439
|
+
<img class="flm-image" src="photo.jpg" alt="Description"> <img class="flm-image flm-image--cover flm-image--round" src="avatar.jpg" alt="User" style="width:48px;height:48px">
|
|
440
|
+
>>>
|
|
441
|
+
:_cols=class¦effect
|
|
442
|
+
flm-image¦Base image
|
|
443
|
+
flm-image--cover¦object-fit: cover
|
|
444
|
+
flm-image--contain¦object-fit: contain
|
|
445
|
+
flm-image--center¦Centered, no scaling
|
|
446
|
+
flm-image--border¦Border + rounded corners
|
|
447
|
+
flm-image--round¦Circular
|
|
448
|
+
flm-image--maximize¦Fill parent 100%
|
|
449
|
+
@choicegroup
|
|
450
|
+
::html
|
|
451
|
+
<<<
|
|
452
|
+
<div class="flm-choicegroup"> <label class="flm-choicegroup-option"> <input type="radio" class="flm-choicegroup-input" name="g1" value="a" checked> <span class="flm-choicegroup-mark"></span> <span class="flm-choicegroup-label">Option A</span> </label> <label class="flm-choicegroup-option"> <input type="radio" class="flm-choicegroup-input" name="g1" value="b"> <span class="flm-choicegroup-mark"></span> <span class="flm-choicegroup-label">Option B</span> </label> </div>
|
|
453
|
+
>>>
|
|
454
|
+
:_cols=class¦effect
|
|
455
|
+
flm-choicegroup¦Radio group container
|
|
456
|
+
flm-choicegroup--horizontal¦Row layout
|
|
457
|
+
flm-choicegroup-option¦Individual radio <label>)
|
|
458
|
+
flm-choicegroup-option--disabled¦Dimmed, pair disabled input
|
|
459
|
+
:_cols=child_class¦element
|
|
460
|
+
flm-choicegroup-input¦Hidden native <input type="radio">
|
|
461
|
+
flm-choicegroup-mark¦Visual radio circle
|
|
462
|
+
flm-choicegroup-label¦Text label
|
|
463
|
+
:native=checked, disabled.
|
|
464
|
+
@shimmer
|
|
465
|
+
::html
|
|
466
|
+
<<<
|
|
467
|
+
<div class="flm-shimmer"> <div class="flm-shimmer-line"></div> <div class="flm-shimmer-line flm-shimmer-line--medium"></div> <div class="flm-shimmer-line flm-shimmer-line--short"></div> </div> <div class="flm-shimmer flm-shimmer--row"> <div class="flm-shimmer-circle"></div> <div class="flm-shimmer" style="flex:1"> <div class="flm-shimmer-line"></div> <div class="flm-shimmer-line flm-shimmer-line--medium"></div> </div> </div>
|
|
468
|
+
>>>
|
|
469
|
+
:_cols=class¦effect
|
|
470
|
+
flm-shimmer¦Container (vertical)
|
|
471
|
+
flm-shimmer--row¦Horizontal composition
|
|
472
|
+
:_cols=element_class¦shape
|
|
473
|
+
flm-shimmer-line¦16px bar (full width)
|
|
474
|
+
flm-shimmer-line--short¦40% width
|
|
475
|
+
flm-shimmer-line--medium¦70% width
|
|
476
|
+
flm-shimmer-circle¦40px circle
|
|
477
|
+
flm-shimmer-circle--small¦24px circle
|
|
478
|
+
flm-shimmer-circle--large¦56px circle
|
|
479
|
+
flm-shimmer-rect¦120×120px block
|
|
480
|
+
flm-shimmer-rect--wide¦200px wide
|
|
481
|
+
flm-shimmer-rect--tall¦200px tall
|
|
482
|
+
@list
|
|
483
|
+
::html
|
|
484
|
+
<<<
|
|
485
|
+
<div class="flm-list flm-list--bordered flm-list--scrollable"> <div class="flm-list-item flm-list-item--selected">Selected</div> <div class="flm-list-item"> <div class="flm-list-item-content"> <span class="flm-list-item-primary">Title</span> <span class="flm-list-item-secondary">Subtitle</span> </div> </div> <div class="flm-list-item flm-list-item--disabled">Disabled</div> </div>
|
|
486
|
+
>>>
|
|
487
|
+
:_cols=class¦effect
|
|
488
|
+
flm-list¦List container
|
|
489
|
+
flm-list--bordered¦Border + dividers
|
|
490
|
+
flm-list--scrollable¦Scrollable (300px max-height)
|
|
491
|
+
flm-list--compact¦Reduced row height
|
|
492
|
+
flm-list-item¦Row (36px min-height)
|
|
493
|
+
flm-list-item--selected¦Checked background
|
|
494
|
+
flm-list-item--disabled¦Dimmed, no pointer events
|
|
495
|
+
:_cols=child_class¦element
|
|
496
|
+
flm-list-item-icon¦Leading icon
|
|
497
|
+
flm-list-item-content¦Wrapper two-line layout
|
|
498
|
+
flm-list-item-primary¦Primary text
|
|
499
|
+
flm-list-item-secondary¦Secondary text
|
|
500
|
+
@groupedlist
|
|
501
|
+
::html
|
|
502
|
+
<<<
|
|
503
|
+
<div class="flm-groupedlist"> <div class="flm-groupedlist-group"> <button class="flm-groupedlist-header"> <i class="flm-groupedlist-chevron flm-groupedlist-chevron--expanded" data-icon="ChevronRight"></i> Group Name <span class="flm-groupedlist-count">(3)</span> </button> <div class="flm-groupedlist-items"> <div class="flm-groupedlist-item">Item 1</div> <div class="flm-groupedlist-item">Item 2</div> </div> </div> </div>
|
|
504
|
+
>>>
|
|
505
|
+
:_cols=class¦effect
|
|
506
|
+
flm-groupedlist¦Container
|
|
507
|
+
flm-groupedlist-group¦Section group
|
|
508
|
+
flm-groupedlist-header¦Collapsible group title
|
|
509
|
+
flm-groupedlist-items¦Items container
|
|
510
|
+
flm-groupedlist-items--collapsed¦Hidden (toggled JS)
|
|
511
|
+
flm-groupedlist-item¦Individual item
|
|
512
|
+
flm-groupedlist-item--selected¦Selected item
|
|
513
|
+
flm-groupedlist-item--disabled¦Disabled item
|
|
514
|
+
flm-groupedlist-chevron¦Expand/collapse icon
|
|
515
|
+
flm-groupedlist-chevron--expanded¦Rotated 90deg
|
|
516
|
+
flm-groupedlist-count¦Item count badge
|
|
517
|
+
@rating
|
|
518
|
+
::html
|
|
519
|
+
<<<
|
|
520
|
+
<div class="flm-rating"> <input type="radio" class="flm-rating-input" name="r" value="5"><label class="flm-rating-star"></label> <input type="radio" class="flm-rating-input" name="r" value="4"><label class="flm-rating-star"></label> <input type="radio" class="flm-rating-input" name="r" value="3" checked><label class="flm-rating-star"></label> <input type="radio" class="flm-rating-input" name="r" value="2"><label class="flm-rating-star"></label> <input type="radio" class="flm-rating-input" name="r" value="1"><label class="flm-rating-star"></label> </div>
|
|
521
|
+
>>>
|
|
522
|
+
:_cols=class¦effect
|
|
523
|
+
flm-rating¦Container (radio inputs ordered 5→1)
|
|
524
|
+
flm-rating--readonly¦Non-interactive, use --filled/--empty stars
|
|
525
|
+
flm-rating--disabled¦Dimmed, no interaction
|
|
526
|
+
flm-rating--large¦Larger stars (32px)
|
|
527
|
+
:_cols=child_class¦element
|
|
528
|
+
flm-rating-input¦Hidden <input type="radio">
|
|
529
|
+
flm-rating-star¦Star label (clip-path shape)
|
|
530
|
+
flm-rating-star--filled¦Filled star (readonly mode)
|
|
531
|
+
flm-rating-star--empty¦Empty star (readonly mode)
|
|
532
|
+
JS stores data-rating-value root
|
|
533
|
+
@facepile
|
|
534
|
+
::html
|
|
535
|
+
<<<
|
|
536
|
+
<div class="flm-facepile" data-max="3"> <span class="flm-facepile-member"><span class="flm-persona-coin">JD</span></span> <span class="flm-facepile-member"><span class="flm-persona-coin">AB</span></span> <span class="flm-facepile-member"><span class="flm-persona-coin">MK</span></span> <span class="flm-facepile-member"><span class="flm-persona-coin">TW</span></span> </div>
|
|
537
|
+
>>>
|
|
538
|
+
:_cols=class¦effect
|
|
539
|
+
flm-facepile¦Container
|
|
540
|
+
flm-facepile-member¦Overlapping coin wrapper
|
|
541
|
+
flm-facepile-overflow¦+N chip (auto-injected JS)
|
|
542
|
+
flm-facepile-add¦Add person button
|
|
543
|
+
:_cols=attribute¦effect
|
|
544
|
+
data-max="N"¦JS hides excess members, shows +N overflow
|
|
545
|
+
@swatchcolorpicker
|
|
546
|
+
::html
|
|
547
|
+
<<<
|
|
548
|
+
<div class="flm-swatchcolorpicker"> <button class="flm-swatchcolorpicker-cell" style="background-color: #ff1744;" data-color="#ff1744"></button> <button class="flm-swatchcolorpicker-cell flm-swatchcolorpicker-cell--selected" style="background-color: #2979ff;" data-color="#2979ff"></button> </div>
|
|
549
|
+
>>>
|
|
550
|
+
:_cols=class¦effect
|
|
551
|
+
flm-swatchcolorpicker¦Grid container
|
|
552
|
+
flm-swatchcolorpicker--circle¦Circular swatches
|
|
553
|
+
flm-swatchcolorpicker--large¦32px swatches
|
|
554
|
+
flm-swatchcolorpicker-cell¦Color button (set background-color inline)
|
|
555
|
+
flm-swatchcolorpicker-cell--selected¦Selection ring
|
|
556
|
+
flm-swatchcolorpicker-cell--disabled¦Dimmed
|
|
557
|
+
:_cols=attribute¦effect
|
|
558
|
+
data-color="hex"¦Color value JS selection tracking
|
|
559
|
+
JS sets data-selected and data-selected-color root
|
|
560
|
+
@documentcard
|
|
561
|
+
::html
|
|
562
|
+
<<<
|
|
563
|
+
<div class="flm-documentcard"> <div class="flm-documentcard-preview"> <div class="flm-documentcard-preview-icon"><i class="flm-icon flm-icon--large" data-icon="Document"></i></div> </div> <div class="flm-documentcard-details"> <span class="flm-documentcard-title">Report.docx</span> </div> <div class="flm-documentcard-activity"> <span class="flm-persona-coin" style="width:24px;height:24px;font-size:10px;">JD</span> <div> <span class="flm-documentcard-activity-name">Jane Doe</span> <span class="flm-documentcard-activity-date">Feb 20</span> </div> </div> </div>
|
|
564
|
+
>>>
|
|
565
|
+
:_cols=class¦effect
|
|
566
|
+
flm-documentcard¦Card container (212px)
|
|
567
|
+
flm-documentcard--compact¦Horizontal layout
|
|
568
|
+
:_cols=child_class¦element
|
|
569
|
+
flm-documentcard-preview¦Image/icon area
|
|
570
|
+
flm-documentcard-preview-icon¦Centered icon
|
|
571
|
+
flm-documentcard-details¦Title/text area
|
|
572
|
+
flm-documentcard-title¦Document name
|
|
573
|
+
flm-documentcard-activity¦Persona + timestamp row
|
|
574
|
+
flm-documentcard-activity-name¦Author name
|
|
575
|
+
flm-documentcard-activity-date¦Timestamp
|
|
576
|
+
flm-documentcard-actions¦Action buttons row
|
|
577
|
+
@spinbutton
|
|
578
|
+
::html
|
|
579
|
+
<<<
|
|
580
|
+
<div class="flm-spinbutton-wrapper"> <label class="flm-label" for="sb1">Quantity</label> <div class="flm-spinbutton"> <button class="flm-spinbutton-btn flm-spinbutton-btn--decrement" data-icon="ChevronDown" aria-label="Decrease"></button> <input class="flm-spinbutton-input" id="sb1" type="number" value="5" min="0" max="100" step="1"> <button class="flm-spinbutton-btn flm-spinbutton-btn--increment" data-icon="ChevronUp" aria-label="Increase"></button> </div> </div>
|
|
581
|
+
>>>
|
|
582
|
+
:_cols=class¦effect
|
|
583
|
+
flm-spinbutton¦Input + buttons container
|
|
584
|
+
flm-spinbutton--disabled¦Disabled state
|
|
585
|
+
flm-spinbutton-wrapper¦Outer wrapper label
|
|
586
|
+
:_cols=child_class¦element
|
|
587
|
+
flm-spinbutton-input¦<input type="number"> (native spinners hidden)
|
|
588
|
+
flm-spinbutton-btn¦Inc/dec button
|
|
589
|
+
flm-spinbutton-btn--decrement¦Decrement button
|
|
590
|
+
flm-spinbutton-btn--increment¦Increment button
|
|
591
|
+
JS wires buttons stepUp()/stepDown()
|
|
592
|
+
@slider
|
|
593
|
+
::html
|
|
594
|
+
<<<
|
|
595
|
+
<div class="flm-slider"> <div class="flm-slider-label"> <label class="flm-label" for="sl1">Volume</label> </div> <div class="flm-slider-container"> <input class="flm-slider-input" id="sl1" type="range" min="0" max="100" value="60"> <span class="flm-slider-value">60</span> </div> </div>
|
|
596
|
+
>>>
|
|
597
|
+
:_cols=class¦effect
|
|
598
|
+
flm-slider¦Container
|
|
599
|
+
flm-slider--disabled¦Disabled state
|
|
600
|
+
flm-slider--vertical¦Vertical orientation
|
|
601
|
+
:_cols=child_class¦element
|
|
602
|
+
flm-slider-container¦Flex wrapper input + value
|
|
603
|
+
flm-slider-input¦<input type="range">
|
|
604
|
+
flm-slider-value¦Live value display
|
|
605
|
+
flm-slider-label¦Label row
|
|
606
|
+
JS sets --flm-slider-fill CSS var track gradient
|
|
607
|
+
@combobox
|
|
608
|
+
::html
|
|
609
|
+
<<<
|
|
610
|
+
<div class="flm-combobox"> <label class="flm-label">Fruit</label> <div class="flm-combobox-wrapper"> <input class="flm-combobox-input" placeholder="Select..."> <button class="flm-combobox-caret" data-icon="ChevronDown" aria-label="Toggle"></button> </div> <div class="flm-combobox-listbox"> <div class="flm-combobox-option" data-value="apple">Apple</div> <div class="flm-combobox-option" data-value="banana">Banana</div> </div> </div>
|
|
611
|
+
>>>
|
|
612
|
+
:_cols=class¦effect
|
|
613
|
+
flm-combobox¦Container
|
|
614
|
+
flm-combobox--disabled¦Disabled state
|
|
615
|
+
flm-combobox--error¦Error border
|
|
616
|
+
:_cols=attribute¦effect
|
|
617
|
+
data-multiselect¦On .flm-combobox — enables multi-select mode
|
|
618
|
+
data-value="val"¦On .flm-combobox-option — option value
|
|
619
|
+
:_cols=child_class¦element
|
|
620
|
+
flm-combobox-wrapper¦Input + caret row
|
|
621
|
+
flm-combobox-input¦Text input
|
|
622
|
+
flm-combobox-caret¦Dropdown toggle button
|
|
623
|
+
flm-combobox-listbox¦Options dropdown
|
|
624
|
+
flm-combobox-option¦Individual option
|
|
625
|
+
flm-combobox-option--selected¦Selected option
|
|
626
|
+
flm-combobox-option--disabled¦Disabled option
|
|
627
|
+
flm-combobox-option-check¦Checkbox (multi-select mode)
|
|
628
|
+
flm-combobox-error¦Error message
|
|
629
|
+
:js=filtering, keyboard nav (ArrowUp/Down/Enter/Escape), click-outside dismiss, flip-above.
|
|
630
|
+
@teachingbubble
|
|
631
|
+
::html
|
|
632
|
+
<<<
|
|
633
|
+
<button data-teachingbubble-toggle="tb1">Learn more</button> <div class="flm-teachingbubble" id="tb1"> <div class="flm-teachingbubble-beak"></div> <div class="flm-teachingbubble-header"> <h3 class="flm-teachingbubble-headline">Welcome!</h3> <button class="flm-teachingbubble-close" data-icon="Cancel" aria-label="Close"></button> </div> <div class="flm-teachingbubble-body">Guidance text here.</div> <div class="flm-teachingbubble-footer"> <button class="flm-button flm-button--primary">Got it!</button> </div> </div>
|
|
634
|
+
>>>
|
|
635
|
+
:_cols=class¦effect
|
|
636
|
+
flm-teachingbubble¦Inverted-color callout (themePrimary bg)
|
|
637
|
+
:_cols=attribute¦effect
|
|
638
|
+
data-teachingbubble-toggle="id"¦Toggle trigger
|
|
639
|
+
:_cols=child_class¦element
|
|
640
|
+
flm-teachingbubble-beak¦Arrow pointing target
|
|
641
|
+
flm-teachingbubble-header¦Header row
|
|
642
|
+
flm-teachingbubble-headline¦Title
|
|
643
|
+
flm-teachingbubble-close¦Close button
|
|
644
|
+
flm-teachingbubble-body¦Content text
|
|
645
|
+
flm-teachingbubble-footer¦Action buttons
|
|
646
|
+
Button colors automatically inverted inside .flm-teachingbubble
|
|
647
|
+
@hovercard
|
|
648
|
+
::html
|
|
649
|
+
<<<
|
|
650
|
+
<span data-hovercard-id="hc1" style="cursor:pointer">Hover me</span> <div class="flm-hovercard" id="hc1"> <div class="flm-hovercard-compact"> <div class="flm-hovercard-title">Jane Doe</div> <div class="flm-hovercard-subtitle">Engineer</div> </div> <div class="flm-hovercard-expanded"> <div class="flm-hovercard-body">Extended details...</div> </div> </div>
|
|
651
|
+
>>>
|
|
652
|
+
:_cols=class¦effect
|
|
653
|
+
flm-hovercard¦Positioned card
|
|
654
|
+
:_cols=attribute¦effect
|
|
655
|
+
data-hovercard-id="id"¦On host — links hovercard
|
|
656
|
+
:_cols=child_class¦element
|
|
657
|
+
flm-hovercard-compact¦First phase (shows after 500ms)
|
|
658
|
+
flm-hovercard-expanded¦Second phase (shows after 1500ms total)
|
|
659
|
+
flm-hovercard-title¦Title
|
|
660
|
+
flm-hovercard-subtitle¦Subtitle
|
|
661
|
+
flm-hovercard-body¦Body text
|
|
662
|
+
Card stays open while mouse
|
|
663
|
+
@coachmark
|
|
664
|
+
::html
|
|
665
|
+
<<<
|
|
666
|
+
<div class="flm-coachmark" data-teachingbubble-toggle="tb1"> <div class="flm-coachmark-dot"></div> <div class="flm-coachmark-ring"></div> </div> <div class="flm-teachingbubble" id="tb1">...</div>
|
|
667
|
+
>>>
|
|
668
|
+
:_cols=class¦effect
|
|
669
|
+
flm-coachmark¦Pulsing beacon
|
|
670
|
+
flm-coachmark--hidden¦Hidden (auto-set when bubble dismissed)
|
|
671
|
+
flm-coachmark--dark¦Dark theme variant
|
|
672
|
+
:_cols=attribute¦effect
|
|
673
|
+
data-teachingbubble-toggle="id"¦Click opens linked TeachingBubble
|
|
674
|
+
:_cols=child_class¦element
|
|
675
|
+
flm-coachmark-dot¦Central dot
|
|
676
|
+
flm-coachmark-ring¦Pulsing ring animation
|
|
677
|
+
JS uses MutationObserver auto-hide beacon when bubble dismissed
|
|
678
|
+
@datepicker
|
|
679
|
+
::html
|
|
680
|
+
<<<
|
|
681
|
+
<div class="flm-datepicker" data-min-date="01/01/2026" data-max-date="12/31/2026"> <label class="flm-label" for="dp1">Date</label> <div class="flm-datepicker-wrapper"> <input class="flm-datepicker-input" id="dp1" placeholder="MM/DD/YYYY"> <button class="flm-datepicker-icon" data-icon="Calendar" aria-label="Open calendar"></button> </div> </div>
|
|
682
|
+
>>>
|
|
683
|
+
:_cols=class¦effect
|
|
684
|
+
flm-datepicker¦Container
|
|
685
|
+
flm-datepicker--disabled¦Disabled state
|
|
686
|
+
flm-datepicker--error¦Error border
|
|
687
|
+
:_cols=attribute¦effect
|
|
688
|
+
data-min-date="MM/DD/YYYY"¦Minimum selectable date
|
|
689
|
+
data-max-date="MM/DD/YYYY"¦Maximum selectable date
|
|
690
|
+
:_cols=child_class¦element
|
|
691
|
+
flm-datepicker-wrapper¦Input + icon row
|
|
692
|
+
flm-datepicker-input¦Text input
|
|
693
|
+
flm-datepicker-icon¦Calendar toggle button
|
|
694
|
+
flm-datepicker-error¦Error message
|
|
695
|
+
JS generates 42-cell calendar grid open. Month nav via prev/next buttons. Day click formats as MM/DD/YYYY
|
|
696
|
+
@tagpicker
|
|
697
|
+
::html
|
|
698
|
+
<<<
|
|
699
|
+
<div class="flm-tagpicker"> <label class="flm-label">Tags</label> <div class="flm-tagpicker-well"> <input class="flm-tagpicker-input" placeholder="Add tags..."> </div> <div class="flm-tagpicker-listbox"> <div class="flm-tagpicker-option" data-value="react">React</div> <div class="flm-tagpicker-option" data-value="vue">Vue</div> </div> </div>
|
|
700
|
+
>>>
|
|
701
|
+
PeoplePicker variant:
|
|
702
|
+
::html
|
|
703
|
+
<<<
|
|
704
|
+
<div class="flm-tagpicker flm-tagpicker--people"> <label class="flm-label">People</label> <div class="flm-tagpicker-well"> <input class="flm-tagpicker-input" placeholder="Search people..."> </div> <div class="flm-tagpicker-listbox"> <div class="flm-tagpicker-option" data-value="jane" data-initials="JD" data-secondary="Engineer"> <span class="flm-tagpicker-option-coin">JD</span> <span class="flm-tagpicker-option-details"> <span class="flm-tagpicker-option-name">Jane Doe</span> <span class="flm-tagpicker-option-secondary">Engineer</span> </span> </div> </div> </div>
|
|
705
|
+
>>>
|
|
706
|
+
:_cols=class¦effect
|
|
707
|
+
flm-tagpicker¦Container
|
|
708
|
+
flm-tagpicker--people¦PeoplePicker variant (shows persona coins)
|
|
709
|
+
flm-tagpicker--disabled¦Disabled state
|
|
710
|
+
flm-tagpicker--error¦Error border
|
|
711
|
+
:_cols=attribute¦effect
|
|
712
|
+
data-max-tags="N"¦Limits number selected tags
|
|
713
|
+
data-value="val"¦On .flm-tagpicker-option — option value
|
|
714
|
+
data-initials="XX"¦On option — initials persona coin (people variant)
|
|
715
|
+
data-secondary="text"¦On option — secondary text (people variant)
|
|
716
|
+
data-selected-values¦Auto-maintained CSV selected values root
|
|
717
|
+
:_cols=child_class¦element
|
|
718
|
+
flm-tagpicker-well¦Input area holding chips + input
|
|
719
|
+
flm-tagpicker-input¦Text input
|
|
720
|
+
flm-tagpicker-chip¦Selected tag pill
|
|
721
|
+
flm-tagpicker-chip-text¦Chip label text
|
|
722
|
+
flm-tagpicker-chip-remove¦Chip remove (X) button
|
|
723
|
+
flm-tagpicker-chip-coin¦Small persona coin chip (people variant)
|
|
724
|
+
flm-tagpicker-listbox¦Options dropdown
|
|
725
|
+
flm-tagpicker-option¦Individual option
|
|
726
|
+
flm-tagpicker-option--selected¦Already-picked option (grayed out)
|
|
727
|
+
flm-tagpicker-option-coin¦Persona coin option (people variant)
|
|
728
|
+
flm-tagpicker-option-details¦Name + secondary text wrapper
|
|
729
|
+
flm-tagpicker-option-name¦Primary name
|
|
730
|
+
flm-tagpicker-option-secondary¦Secondary text
|
|
731
|
+
flm-tagpicker-error¦Error message
|
|
732
|
+
:js=type-to-filter, keyboard nav (ArrowUp/Down/Enter/Escape), Backspace removes last chip, click X removes chip, click-outside dismiss, flip-above.
|
|
733
|
+
@overflowset
|
|
734
|
+
::html
|
|
735
|
+
<<<
|
|
736
|
+
<div class="flm-overflowset"> <div class="flm-overflowset-items"> <button class="flm-overflowset-item" data-label="New" data-icon="Add">New</button> <button class="flm-overflowset-item" data-label="Edit" data-icon="Edit">Edit</button> </div> <button class="flm-overflowset-overflow" aria-label="More items">...</button> <div class="flm-overflowset-far"> <button class="flm-overflowset-item">Settings</button> </div> </div>
|
|
737
|
+
>>>
|
|
738
|
+
:_cols=class¦effect
|
|
739
|
+
flm-overflowset¦Container (flex row, overflow hidden)
|
|
740
|
+
flm-overflowset--has-overflow¦Auto-set when items overflow (shows "..." button)
|
|
741
|
+
flm-overflowset-items¦Flex row holding items
|
|
742
|
+
flm-overflowset-item¦Individual item (flex-shrink: 0)
|
|
743
|
+
flm-overflowset-item--hidden¦Hidden JS (overflowed)
|
|
744
|
+
flm-overflowset-overflow¦"..." overflow button
|
|
745
|
+
flm-overflowset-far¦Right-side items (never overflow, margin-left: auto)
|
|
746
|
+
:_cols=attribute¦effect
|
|
747
|
+
data-overflow-order="N"¦Higher N overflows first (priority control)
|
|
748
|
+
data-label="text"¦Label shown overflow menu
|
|
749
|
+
data-icon="Name"¦Icon shown overflow menu
|
|
750
|
+
:js=ResizeObserver measures available width, hides items that don't fit, builds a ContextMenu for hidden items. Clicking a menu item proxies the original item's click.
|
|
751
|
+
@timepicker
|
|
752
|
+
::html
|
|
753
|
+
<<<
|
|
754
|
+
<div class="flm-timepicker" data-increment="30" data-use-12h data-min-time="09:00" data-max-time="17:00"> <label class="flm-label" for="tp1">Time</label> <div class="flm-timepicker-wrapper"> <input class="flm-timepicker-input" id="tp1" placeholder="Select a time..."> <button class="flm-timepicker-icon" data-icon="Clock" aria-label="Open time picker"></button> </div> </div>
|
|
755
|
+
>>>
|
|
756
|
+
:_cols=class¦effect
|
|
757
|
+
flm-timepicker¦Container
|
|
758
|
+
flm-timepicker--disabled¦Disabled state
|
|
759
|
+
flm-timepicker--error¦Error border
|
|
760
|
+
:_cols=attribute¦effect
|
|
761
|
+
data-increment="30"¦Minute increment (default 30)
|
|
762
|
+
data-use-12h¦12-hour format AM/PM (default 24h)
|
|
763
|
+
data-min-time="HH:MM"¦Earliest available time (24h format)
|
|
764
|
+
data-max-time="HH:MM"¦Latest available time (24h format)
|
|
765
|
+
:_cols=child_class¦element
|
|
766
|
+
flm-timepicker-wrapper¦Input + icon row
|
|
767
|
+
flm-timepicker-input¦Text input (typeable, filters options)
|
|
768
|
+
flm-timepicker-icon¦Clock toggle button
|
|
769
|
+
flm-timepicker-error¦Error message
|
|
770
|
+
JS generates time-slot options configured increment. Input text filters list. Arrow keys navigate, Enter selects, Escape closes. Auto-scrolls selected or nearest-to-current-time option open
|
|
771
|
+
@css_custom_properties
|
|
772
|
+
Use variables inline style attributes or demo-specific <style> blocks. automatically adapt light/dark theme. Do not use Fluent UI v2 variable names (e.g. --colorNeutralForeground1) — not defined library
|
|
773
|
+
@semantic_colors_theme-aware
|
|
774
|
+
Use page layout, custom containers, and demo styling:
|
|
775
|
+
:_cols=variable¦purpose
|
|
776
|
+
--bodyBackground¦Page / container background
|
|
777
|
+
--bodyStandoutBackground¦Slightly offset background (sidebars, cards)
|
|
778
|
+
--bodyFrameBackground¦Frame / shell background
|
|
779
|
+
--bodyFrameDivider¦Border frame sections
|
|
780
|
+
--bodyDivider¦General divider lines
|
|
781
|
+
--bodyText¦Primary text color
|
|
782
|
+
--bodyTextChecked¦Text checked/selected background
|
|
783
|
+
--bodySubtext¦Secondary / caption text
|
|
784
|
+
--disabledText¦Disabled text
|
|
785
|
+
--errorText¦Error text
|
|
786
|
+
--successText¦Success text
|
|
787
|
+
--link¦Link color
|
|
788
|
+
--linkHovered¦Link hover color
|
|
789
|
+
--overlayBackground¦Semi-transparent backdrop
|
|
790
|
+
--defaultStateBackground¦Default surface background
|
|
791
|
+
--focusBorder¦Focus outline color
|
|
792
|
+
@palette_colors
|
|
793
|
+
Raw color values — not theme-aware light and dark):
|
|
794
|
+
:_cols=variable¦value
|
|
795
|
+
--themePrimary¦#0078d4 (brand blue)
|
|
796
|
+
--themeDark¦#005a9e
|
|
797
|
+
--themeDarkAlt¦#106ebe
|
|
798
|
+
--themeDarker¦#004578
|
|
799
|
+
--themeSecondary¦#2b88d8
|
|
800
|
+
--themeTertiary¦#71afe5
|
|
801
|
+
--themeLight¦#c7e0f4
|
|
802
|
+
--themeLighter¦#deecf9
|
|
803
|
+
--themeLighterAlt¦#eff6fc
|
|
804
|
+
--black¦#000000
|
|
805
|
+
--white¦#ffffff
|
|
806
|
+
--neutralPrimary¦#323130
|
|
807
|
+
--neutralSecondary¦#605e5c
|
|
808
|
+
--neutralTertiary¦#a19f9d
|
|
809
|
+
--neutralLight¦#edebe9
|
|
810
|
+
--neutralLighter¦#f3f2f1
|
|
811
|
+
--neutralLighterAlt¦#faf9f8
|
|
812
|
+
--red¦#e81123
|
|
813
|
+
--redDark¦#a4262c
|
|
814
|
+
--orange¦#d83b01
|
|
815
|
+
--yellow¦#ffb900
|
|
816
|
+
--green¦#107c10
|
|
817
|
+
--teal¦#008272
|
|
818
|
+
--blue¦#0078d4
|
|
819
|
+
--purple¦#5c2d91
|
|
820
|
+
@status_backgrounds_theme-aware
|
|
821
|
+
:_cols=variable¦purpose
|
|
822
|
+
--infoBackground¦Info message bar / banner
|
|
823
|
+
--errorBackground¦Error state
|
|
824
|
+
--warningBackground¦Warning state
|
|
825
|
+
--severeWarningBackground¦Severe warning state
|
|
826
|
+
--successBackground¦Success state
|
|
827
|
+
--blockingBackground¦Blocking state
|
|
828
|
+
@typography
|
|
829
|
+
:_cols=variable¦value
|
|
830
|
+
--fontFamily¦Segoe UI system stack
|
|
831
|
+
--fontFamilyMonospace¦Cascadia Code / Consolas
|
|
832
|
+
--fontSizeTiny¦10px
|
|
833
|
+
--fontSizeSmall¦12px
|
|
834
|
+
--fontSizeMedium¦14px
|
|
835
|
+
--fontSizeMediumPlus¦16px
|
|
836
|
+
--fontSizeLarge¦18px
|
|
837
|
+
--fontSizeXLarge¦20px
|
|
838
|
+
--fontSizeXXLarge¦28px
|
|
839
|
+
--fontSizeSuperLarge¦42px
|
|
840
|
+
--fontSizeMega¦68px
|
|
841
|
+
--fontWeightRegular¦400
|
|
842
|
+
--fontWeightSemibold¦600
|
|
843
|
+
--fontWeightBold¦700
|
|
844
|
+
@spacing
|
|
845
|
+
:_cols=variable¦value
|
|
846
|
+
--spacingS2¦4px
|
|
847
|
+
--spacingS1¦8px
|
|
848
|
+
--spacingM¦16px
|
|
849
|
+
--spacingL1¦20px
|
|
850
|
+
--spacingL2¦32px
|
|
851
|
+
@effects
|
|
852
|
+
:_cols=variable¦purpose
|
|
853
|
+
--elevation4¦Subtle shadow (cards)
|
|
854
|
+
--elevation8¦Medium shadow (dropdowns, callouts)
|
|
855
|
+
--elevation16¦Prominent shadow (dialogs, panels)
|
|
856
|
+
--elevation64¦Dramatic shadow
|
|
857
|
+
--roundedCorner2¦2px border radius
|
|
858
|
+
--roundedCorner4¦4px border radius
|
|
859
|
+
--roundedCorner6¦6px border radius
|
|
860
|
+
@motion
|
|
861
|
+
:_cols=variable¦value
|
|
862
|
+
--duration1¦100ms
|
|
863
|
+
--duration2¦200ms
|
|
864
|
+
--duration3¦300ms
|
|
865
|
+
--duration4¦400ms
|
|
866
|
+
--easeAccelerate¦cubic-bezier(0.9, 0.1, 1, 0.2)
|
|
867
|
+
--easeDecelerate¦cubic-bezier(0.1, 0.9, 0.2, 1)
|
|
868
|
+
--easeStandard¦cubic-bezier(0.8, 0, 0.2, 1)
|