@ably/ui 17.10.0 → 17.10.1-dev.26bd7a31
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/core/Flyout.js +1 -1
- package/core/Flyout.js.map +1 -1
- package/core/Icon/components/icon-gui-heartbeat-outline.js +2 -0
- package/core/Icon/components/icon-gui-heartbeat-outline.js.map +1 -0
- package/core/Icon/components/icon-gui-heartbeat-solid.js +2 -0
- package/core/Icon/components/icon-gui-heartbeat-solid.js.map +1 -0
- package/core/Icon/components/icon-gui-square-3-stack-3d.js +2 -0
- package/core/Icon/components/icon-gui-square-3-stack-3d.js.map +1 -0
- package/core/Icon/components/index.js +1 -1
- package/core/Icon/components/index.js.map +1 -1
- package/core/Icon/computed-icons/gui-icons.js +1 -1
- package/core/Icon/computed-icons/gui-icons.js.map +1 -1
- package/core/Meganav/MeganavBlog.js +2 -0
- package/core/Meganav/MeganavBlog.js.map +1 -0
- package/core/Meganav/MeganavCustomerStories.js +2 -0
- package/core/Meganav/MeganavCustomerStories.js.map +1 -0
- package/core/Meganav/MeganavPanel.js +1 -1
- package/core/Meganav/MeganavPanel.js.map +1 -1
- package/core/Meganav/MeganavPanelItemLinks.js +2 -0
- package/core/Meganav/MeganavPanelItemLinks.js.map +1 -0
- package/core/Meganav/MeganavTile.js +2 -0
- package/core/Meganav/MeganavTile.js.map +1 -0
- package/core/Meganav/data.js +1 -1
- package/core/Meganav/data.js.map +1 -1
- package/core/Meganav/images/cust-logo-doxy-dark.png +0 -0
- package/core/Meganav/images/cust-logo-doxy-light.png +0 -0
- package/core/Meganav/utils/getMenuItemsForHeader.js +2 -0
- package/core/Meganav/utils/getMenuItemsForHeader.js.map +1 -0
- package/core/Meganav/utils.js +2 -0
- package/core/Meganav/utils.js.map +1 -0
- package/core/Meganav.js +1 -1
- package/core/Meganav.js.map +1 -1
- package/core/ProductTile/ProductLabel.js +1 -1
- package/core/ProductTile/ProductLabel.js.map +1 -1
- package/core/ProductTile/data.js +1 -1
- package/core/ProductTile/data.js.map +1 -1
- package/core/icons/gui/icon-gui-heartbeat-outline.svg +4 -0
- package/core/icons/gui/icon-gui-heartbeat-solid.svg +4 -0
- package/core/sprites-gui.svg +1 -1
- package/index.d.ts +146 -27
- package/package.json +2 -4
- package/AGENTS.md +0 -197
- package/core/Meganav/MeganavProductTile.js +0 -2
- package/core/Meganav/MeganavProductTile.js.map +0 -1
- package/core/Meganav/images/fan-engagement-nav-image.png +0 -0
- package/core/Meganav/images/founders-nav-image.png +0 -0
package/index.d.ts
CHANGED
|
@@ -2105,6 +2105,28 @@ export default ForwardRef;
|
|
|
2105
2105
|
//# sourceMappingURL=icon-gui-glasses.d.ts.map
|
|
2106
2106
|
}
|
|
2107
2107
|
|
|
2108
|
+
declare module '@ably/ui/core/Icon/components/icon-gui-heartbeat-outline' {
|
|
2109
|
+
import * as React from "react";
|
|
2110
|
+
interface SVGRProps {
|
|
2111
|
+
title?: string;
|
|
2112
|
+
titleId?: string;
|
|
2113
|
+
}
|
|
2114
|
+
const ForwardRef: React.ForwardRefExoticComponent<Omit<React.SVGProps<SVGSVGElement> & SVGRProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
2115
|
+
export default ForwardRef;
|
|
2116
|
+
//# sourceMappingURL=icon-gui-heartbeat-outline.d.ts.map
|
|
2117
|
+
}
|
|
2118
|
+
|
|
2119
|
+
declare module '@ably/ui/core/Icon/components/icon-gui-heartbeat-solid' {
|
|
2120
|
+
import * as React from "react";
|
|
2121
|
+
interface SVGRProps {
|
|
2122
|
+
title?: string;
|
|
2123
|
+
titleId?: string;
|
|
2124
|
+
}
|
|
2125
|
+
const ForwardRef: React.ForwardRefExoticComponent<Omit<React.SVGProps<SVGSVGElement> & SVGRProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
2126
|
+
export default ForwardRef;
|
|
2127
|
+
//# sourceMappingURL=icon-gui-heartbeat-solid.d.ts.map
|
|
2128
|
+
}
|
|
2129
|
+
|
|
2108
2130
|
declare module '@ably/ui/core/Icon/components/icon-gui-history' {
|
|
2109
2131
|
import * as React from "react";
|
|
2110
2132
|
interface SVGRProps {
|
|
@@ -2369,6 +2391,17 @@ export default ForwardRef;
|
|
|
2369
2391
|
//# sourceMappingURL=icon-gui-spinner-light.d.ts.map
|
|
2370
2392
|
}
|
|
2371
2393
|
|
|
2394
|
+
declare module '@ably/ui/core/Icon/components/icon-gui-square-3-stack-3d' {
|
|
2395
|
+
import * as React from "react";
|
|
2396
|
+
interface SVGRProps {
|
|
2397
|
+
title?: string;
|
|
2398
|
+
titleId?: string;
|
|
2399
|
+
}
|
|
2400
|
+
const ForwardRef: React.ForwardRefExoticComponent<Omit<React.SVGProps<SVGSVGElement> & SVGRProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
2401
|
+
export default ForwardRef;
|
|
2402
|
+
//# sourceMappingURL=icon-gui-square-3-stack-3d.d.ts.map
|
|
2403
|
+
}
|
|
2404
|
+
|
|
2372
2405
|
declare module '@ably/ui/core/Icon/components/icon-product-ai-transport-mono' {
|
|
2373
2406
|
import * as React from "react";
|
|
2374
2407
|
interface SVGRProps {
|
|
@@ -5011,6 +5044,8 @@ import IconGuiFilterFlowStep3 from "@ably/ui/core/icon-gui-filter-flow-step-3";
|
|
|
5011
5044
|
import IconGuiFlowerGrowth from "@ably/ui/core/icon-gui-flower-growth";
|
|
5012
5045
|
import IconGuiFurtherReading from "@ably/ui/core/icon-gui-further-reading";
|
|
5013
5046
|
import IconGuiGlasses from "@ably/ui/core/icon-gui-glasses";
|
|
5047
|
+
import IconGuiHeartbeatOutline from "@ably/ui/core/icon-gui-heartbeat-outline";
|
|
5048
|
+
import IconGuiHeartbeatSolid from "@ably/ui/core/icon-gui-heartbeat-solid";
|
|
5014
5049
|
import IconGuiHistory from "@ably/ui/core/icon-gui-history";
|
|
5015
5050
|
import IconGuiLiveChat from "@ably/ui/core/icon-gui-live-chat";
|
|
5016
5051
|
import IconGuiMouse from "@ably/ui/core/icon-gui-mouse";
|
|
@@ -5035,7 +5070,7 @@ import IconGuiRefresh from "@ably/ui/core/icon-gui-refresh";
|
|
|
5035
5070
|
import IconGuiResources from "@ably/ui/core/icon-gui-resources";
|
|
5036
5071
|
import IconGuiSpinnerDark from "@ably/ui/core/icon-gui-spinner-dark";
|
|
5037
5072
|
import IconGuiSpinnerLight from "@ably/ui/core/icon-gui-spinner-light";
|
|
5038
|
-
export { IconGuiAblyBadge, IconGuiCheckCircledFill, IconGuiCheckLotusCircled, IconGuiChecklistChecked, IconGuiCodeDoc, IconGuiCursor, IconGuiExpand, IconGuiFilterFlowStep0, IconGuiFilterFlowStep1, IconGuiFilterFlowStep2, IconGuiFilterFlowStep3, IconGuiFlowerGrowth, IconGuiFurtherReading, IconGuiGlasses, IconGuiHistory, IconGuiLiveChat, IconGuiMouse, IconGuiPartial, IconGuiPitfall, IconGuiProdAiTransportOutline, IconGuiProdAiTransportSolid, IconGuiProdAssetTrackingOutline, IconGuiProdAssetTrackingSolid, IconGuiProdChatOutline, IconGuiProdChatSolid, IconGuiProdLiveobjectsOutline, IconGuiProdLiveobjectsSolid, IconGuiProdLivesyncOutline, IconGuiProdLivesyncSolid, IconGuiProdPubsubOutline, IconGuiProdPubsubSolid, IconGuiProdSpacesOutline, IconGuiProdSpacesSolid, IconGuiQuoteMarksFill, IconGuiRefresh, IconGuiResources, IconGuiSpinnerDark, IconGuiSpinnerLight, };
|
|
5073
|
+
export { IconGuiAblyBadge, IconGuiCheckCircledFill, IconGuiCheckLotusCircled, IconGuiChecklistChecked, IconGuiCodeDoc, IconGuiCursor, IconGuiExpand, IconGuiFilterFlowStep0, IconGuiFilterFlowStep1, IconGuiFilterFlowStep2, IconGuiFilterFlowStep3, IconGuiFlowerGrowth, IconGuiFurtherReading, IconGuiGlasses, IconGuiHeartbeatOutline, IconGuiHeartbeatSolid, IconGuiHistory, IconGuiLiveChat, IconGuiMouse, IconGuiPartial, IconGuiPitfall, IconGuiProdAiTransportOutline, IconGuiProdAiTransportSolid, IconGuiProdAssetTrackingOutline, IconGuiProdAssetTrackingSolid, IconGuiProdChatOutline, IconGuiProdChatSolid, IconGuiProdLiveobjectsOutline, IconGuiProdLiveobjectsSolid, IconGuiProdLivesyncOutline, IconGuiProdLivesyncSolid, IconGuiProdPubsubOutline, IconGuiProdPubsubSolid, IconGuiProdSpacesOutline, IconGuiProdSpacesSolid, IconGuiQuoteMarksFill, IconGuiRefresh, IconGuiResources, IconGuiSpinnerDark, IconGuiSpinnerLight, };
|
|
5039
5074
|
import IconProductAiTransportMono from "@ably/ui/core/icon-product-ai-transport-mono";
|
|
5040
5075
|
import IconProductAiTransport from "@ably/ui/core/icon-product-ai-transport";
|
|
5041
5076
|
import IconProductAssetTrackingMono from "@ably/ui/core/icon-product-asset-tracking-mono";
|
|
@@ -5278,7 +5313,7 @@ export const displayIcons: readonly ["icon-display-48hrs", "icon-display-ably-ch
|
|
|
5278
5313
|
}
|
|
5279
5314
|
|
|
5280
5315
|
declare module '@ably/ui/core/Icon/computed-icons/gui-icons' {
|
|
5281
|
-
export const guiIcons: readonly ["icon-gui-ably-badge", "icon-gui-check-circled-fill", "icon-gui-check-lotus-circled", "icon-gui-checklist-checked", "icon-gui-code-doc", "icon-gui-cursor", "icon-gui-expand", "icon-gui-filter-flow-step-0", "icon-gui-filter-flow-step-1", "icon-gui-filter-flow-step-2", "icon-gui-filter-flow-step-3", "icon-gui-flower-growth", "icon-gui-further-reading", "icon-gui-glasses", "icon-gui-history", "icon-gui-live-chat", "icon-gui-mouse", "icon-gui-partial", "icon-gui-pitfall", "icon-gui-prod-ai-transport-outline", "icon-gui-prod-ai-transport-solid", "icon-gui-prod-asset-tracking-outline", "icon-gui-prod-asset-tracking-solid", "icon-gui-prod-chat-outline", "icon-gui-prod-chat-solid", "icon-gui-prod-liveobjects-outline", "icon-gui-prod-liveobjects-solid", "icon-gui-prod-livesync-outline", "icon-gui-prod-livesync-solid", "icon-gui-prod-pubsub-outline", "icon-gui-prod-pubsub-solid", "icon-gui-prod-spaces-outline", "icon-gui-prod-spaces-solid", "icon-gui-quote-marks-fill", "icon-gui-refresh", "icon-gui-resources", "icon-gui-spinner-dark", "icon-gui-spinner-light"];
|
|
5316
|
+
export const guiIcons: readonly ["icon-gui-ably-badge", "icon-gui-check-circled-fill", "icon-gui-check-lotus-circled", "icon-gui-checklist-checked", "icon-gui-code-doc", "icon-gui-cursor", "icon-gui-expand", "icon-gui-filter-flow-step-0", "icon-gui-filter-flow-step-1", "icon-gui-filter-flow-step-2", "icon-gui-filter-flow-step-3", "icon-gui-flower-growth", "icon-gui-further-reading", "icon-gui-glasses", "icon-gui-heartbeat-outline", "icon-gui-heartbeat-solid", "icon-gui-history", "icon-gui-live-chat", "icon-gui-mouse", "icon-gui-partial", "icon-gui-pitfall", "icon-gui-prod-ai-transport-outline", "icon-gui-prod-ai-transport-solid", "icon-gui-prod-asset-tracking-outline", "icon-gui-prod-asset-tracking-solid", "icon-gui-prod-chat-outline", "icon-gui-prod-chat-solid", "icon-gui-prod-liveobjects-outline", "icon-gui-prod-liveobjects-solid", "icon-gui-prod-livesync-outline", "icon-gui-prod-livesync-solid", "icon-gui-prod-pubsub-outline", "icon-gui-prod-pubsub-solid", "icon-gui-prod-spaces-outline", "icon-gui-prod-spaces-solid", "icon-gui-quote-marks-fill", "icon-gui-refresh", "icon-gui-resources", "icon-gui-spinner-dark", "icon-gui-spinner-light"];
|
|
5282
5317
|
//# sourceMappingURL=gui-icons.d.ts.map
|
|
5283
5318
|
}
|
|
5284
5319
|
|
|
@@ -5299,7 +5334,7 @@ export const techIcons: readonly ["icon-tech-ably", "icon-tech-ably-api-streamer
|
|
|
5299
5334
|
|
|
5300
5335
|
declare module '@ably/ui/core/Icon/types' {
|
|
5301
5336
|
export const iconNames: {
|
|
5302
|
-
gui: readonly ["icon-gui-ably-badge", "icon-gui-check-circled-fill", "icon-gui-check-lotus-circled", "icon-gui-checklist-checked", "icon-gui-code-doc", "icon-gui-cursor", "icon-gui-expand", "icon-gui-filter-flow-step-0", "icon-gui-filter-flow-step-1", "icon-gui-filter-flow-step-2", "icon-gui-filter-flow-step-3", "icon-gui-flower-growth", "icon-gui-further-reading", "icon-gui-glasses", "icon-gui-history", "icon-gui-live-chat", "icon-gui-mouse", "icon-gui-partial", "icon-gui-pitfall", "icon-gui-prod-ai-transport-outline", "icon-gui-prod-ai-transport-solid", "icon-gui-prod-asset-tracking-outline", "icon-gui-prod-asset-tracking-solid", "icon-gui-prod-chat-outline", "icon-gui-prod-chat-solid", "icon-gui-prod-liveobjects-outline", "icon-gui-prod-liveobjects-solid", "icon-gui-prod-livesync-outline", "icon-gui-prod-livesync-solid", "icon-gui-prod-pubsub-outline", "icon-gui-prod-pubsub-solid", "icon-gui-prod-spaces-outline", "icon-gui-prod-spaces-solid", "icon-gui-quote-marks-fill", "icon-gui-refresh", "icon-gui-resources", "icon-gui-spinner-dark", "icon-gui-spinner-light"];
|
|
5337
|
+
gui: readonly ["icon-gui-ably-badge", "icon-gui-check-circled-fill", "icon-gui-check-lotus-circled", "icon-gui-checklist-checked", "icon-gui-code-doc", "icon-gui-cursor", "icon-gui-expand", "icon-gui-filter-flow-step-0", "icon-gui-filter-flow-step-1", "icon-gui-filter-flow-step-2", "icon-gui-filter-flow-step-3", "icon-gui-flower-growth", "icon-gui-further-reading", "icon-gui-glasses", "icon-gui-heartbeat-outline", "icon-gui-heartbeat-solid", "icon-gui-history", "icon-gui-live-chat", "icon-gui-mouse", "icon-gui-partial", "icon-gui-pitfall", "icon-gui-prod-ai-transport-outline", "icon-gui-prod-ai-transport-solid", "icon-gui-prod-asset-tracking-outline", "icon-gui-prod-asset-tracking-solid", "icon-gui-prod-chat-outline", "icon-gui-prod-chat-solid", "icon-gui-prod-liveobjects-outline", "icon-gui-prod-liveobjects-solid", "icon-gui-prod-livesync-outline", "icon-gui-prod-livesync-solid", "icon-gui-prod-pubsub-outline", "icon-gui-prod-pubsub-solid", "icon-gui-prod-spaces-outline", "icon-gui-prod-spaces-solid", "icon-gui-quote-marks-fill", "icon-gui-refresh", "icon-gui-resources", "icon-gui-spinner-dark", "icon-gui-spinner-light"];
|
|
5303
5338
|
display: readonly ["icon-display-48hrs", "icon-display-ably-channels", "icon-display-about-ably-col", "icon-display-api", "icon-display-api-keys", "icon-display-architectural-guidance", "icon-display-asset-tracking-col", "icon-display-authentication", "icon-display-avatar-stack", "icon-display-browser", "icon-display-calendar", "icon-display-call-mobile", "icon-display-careers-col", "icon-display-case-studies-col", "icon-display-chat-col", "icon-display-chat-mono", "icon-display-chat-stack", "icon-display-chat-stack-col", "icon-display-cloud-servers", "icon-display-compare-tech-col", "icon-display-connection-state-recovery", "icon-display-consumer-groups", "icon-display-custom", "icon-display-custom-cname", "icon-display-customers-col", "icon-display-data-broadcast-col", "icon-display-data-broadcast-mono", "icon-display-data-synchronization-col", "icon-display-dedicated-cluster", "icon-display-deltas", "icon-display-docs-col", "icon-display-documentation", "icon-display-dynamic-channel-groups", "icon-display-edge-network", "icon-display-elasticity", "icon-display-equalisers-mono", "icon-display-events-col", "icon-display-exactly-once-delivery", "icon-display-examples-col", "icon-display-fan-out", "icon-display-firehose", "icon-display-gdpr", "icon-display-general-comms", "icon-display-granular-permissions", "icon-display-hipaa", "icon-display-hipaa-mono", "icon-display-history", "icon-display-integrations", "icon-display-integrations-col", "icon-display-it-support-access", "icon-display-it-support-helpdesk", "icon-display-kafka-at-the-edge-col", "icon-display-laptop", "icon-display-last-seen", "icon-display-lightbulb-col", "icon-display-live-chat", "icon-display-live-updates-results-metrics-col", "icon-display-map-pin", "icon-display-message", "icon-display-message-batching", "icon-display-message-persistence", "icon-display-message-queues", "icon-display-multi-user-spaces-col", "icon-display-observe-analytics", "icon-display-padlock-closed", "icon-display-platform", "icon-display-play", "icon-display-premium-support", "icon-display-privacy-shield-framework", "icon-display-private-link", "icon-display-push-notifications", "icon-display-push-notifications-col", "icon-display-push-notifications-mono", "icon-display-quickstart-guides-col", "icon-display-reactions", "icon-display-read-receipts", "icon-display-resources-col", "icon-display-rewind", "icon-display-sdks-col", "icon-display-send-received-messages", "icon-display-servers", "icon-display-shopping-cart", "icon-display-sla", "icon-display-soc2-type2", "icon-display-soc2-type2-mono", "icon-display-something-else", "icon-display-something-else-mono", "icon-display-subscription-filters", "icon-display-support-chat-mono", "icon-display-system-metadata", "icon-display-tech-account-comms", "icon-display-tutorials-demos-col", "icon-display-ui", "icon-display-ui-mono", "icon-display-virtual-events", "icon-display-virtual-events-col"];
|
|
5304
5339
|
social: readonly ["icon-social-discord", "icon-social-discord-mono", "icon-social-facebook", "icon-social-facebook-mono", "icon-social-github", "icon-social-github-mono", "icon-social-glassdoor", "icon-social-glassdoor-mono", "icon-social-google", "icon-social-google-mono", "icon-social-linkedin", "icon-social-linkedin-mono", "icon-social-slack", "icon-social-slack-mono", "icon-social-stackoverflow", "icon-social-stackoverflow-mono", "icon-social-twitter", "icon-social-twitter-mono", "icon-social-x", "icon-social-x-mono", "icon-social-youtube", "icon-social-youtube-mono"];
|
|
5305
5340
|
tech: readonly ["icon-tech-ably", "icon-tech-ably-api-streamer", "icon-tech-ably-firehose", "icon-tech-ably-native", "icon-tech-activemq", "icon-tech-activitypub", "icon-tech-aerospike", "icon-tech-akka", "icon-tech-amazon-ec2", "icon-tech-amazon-event-bridge", "icon-tech-amqp091", "icon-tech-amqp10", "icon-tech-android-full", "icon-tech-android-head", "icon-tech-angular", "icon-tech-anycable", "icon-tech-apache-cassandra", "icon-tech-apache-cordova", "icon-tech-apache-kafka", "icon-tech-apache-spark", "icon-tech-apachepulsar", "icon-tech-apachestorm", "icon-tech-apns", "icon-tech-assemblyai", "icon-tech-atmosphere", "icon-tech-aws", "icon-tech-aws-app-sync", "icon-tech-aws-aurora", "icon-tech-aws-gateway-websockets", "icon-tech-aws-sns", "icon-tech-aws-sqs", "icon-tech-awsiot", "icon-tech-awskinesis", "icon-tech-awslambda", "icon-tech-awssqs", "icon-tech-azure-api", "icon-tech-azure-archive-api", "icon-tech-azure-bus", "icon-tech-azure-cosmos", "icon-tech-azure-event-hub", "icon-tech-azure-functions", "icon-tech-azure-search", "icon-tech-azure-static-web-app", "icon-tech-azure-static-web-apps", "icon-tech-azure-storage", "icon-tech-azure-web-pubsub", "icon-tech-azurefunctions", "icon-tech-azureservicebus", "icon-tech-azuresignalR", "icon-tech-bayeux", "icon-tech-c++", "icon-tech-centrifugo", "icon-tech-claude", "icon-tech-claude-mono", "icon-tech-client-side-frameworks", "icon-tech-clojure", "icon-tech-cloudflare-durable-objects", "icon-tech-cloudflareworkers", "icon-tech-cocoa", "icon-tech-confluent", "icon-tech-cord", "icon-tech-csharp", "icon-tech-curl", "icon-tech-customwebhooks", "icon-tech-datadog", "icon-tech-design-patterns", "icon-tech-devplatforms", "icon-tech-diffusion-data", "icon-tech-django", "icon-tech-engineio", "icon-tech-event-driven-servers", "icon-tech-fanout-io", "icon-tech-fast-api", "icon-tech-fauna", "icon-tech-featherjs", "icon-tech-firebase", "icon-tech-firebase-cloud-messaging", "icon-tech-flutter", "icon-tech-gcloudbigquery", "icon-tech-gclouddataflow", "icon-tech-gcloudfunctions", "icon-tech-gcloudpubsub", "icon-tech-go", "icon-tech-grpc", "icon-tech-hivemq", "icon-tech-http2", "icon-tech-http3", "icon-tech-httprest", "icon-tech-idempotency", "icon-tech-ifttt", "icon-tech-integrations", "icon-tech-ios", "icon-tech-ios-generic", "icon-tech-ipados", "icon-tech-ipfs", "icon-tech-ironmq", "icon-tech-java", "icon-tech-javascript", "icon-tech-jms", "icon-tech-json", "icon-tech-json-web-tokens", "icon-tech-kaazing", "icon-tech-kotlin", "icon-tech-ksql-db", "icon-tech-kubernetes", "icon-tech-laravel-broadcast", "icon-tech-laravel-echo", "icon-tech-lightstreamer", "icon-tech-liveblocks", "icon-tech-longpolling", "icon-tech-macos", "icon-tech-matrix", "icon-tech-meteor", "icon-tech-mongo-db", "icon-tech-mono", "icon-tech-mqtt", "icon-tech-mysql", "icon-tech-native-script", "icon-tech-net", "icon-tech-netlify", "icon-tech-nextjs", "icon-tech-nkn", "icon-tech-nodejs", "icon-tech-objectivec", "icon-tech-openai", "icon-tech-parse-server", "icon-tech-php", "icon-tech-planetscale", "icon-tech-postgres", "icon-tech-prisma", "icon-tech-programminglanguages", "icon-tech-protcol-adaptors", "icon-tech-protocols", "icon-tech-pub-sub", "icon-tech-pubnub", "icon-tech-push-technology", "icon-tech-pusher", "icon-tech-python", "icon-tech-quic", "icon-tech-rabbitMQ", "icon-tech-railsactioncable", "icon-tech-react", "icon-tech-react-app", "icon-tech-reactnative", "icon-tech-redis", "icon-tech-redpanda", "icon-tech-replicache", "icon-tech-rethinkdb", "icon-tech-rocketmq", "icon-tech-ruby", "icon-tech-scala", "icon-tech-scaledrone", "icon-tech-serversentevents", "icon-tech-serversideframeworks", "icon-tech-signalR", "icon-tech-snowflake", "icon-tech-socketio", "icon-tech-sockjs", "icon-tech-solace", "icon-tech-spring", "icon-tech-stomp", "icon-tech-streamdata-io", "icon-tech-streamr", "icon-tech-swift", "icon-tech-symfony", "icon-tech-symfony-mercure", "icon-tech-tcp-ip", "icon-tech-tenefit", "icon-tech-terraform", "icon-tech-terraform-outline", "icon-tech-tvos", "icon-tech-twilio", "icon-tech-typescript", "icon-tech-udp-protocol", "icon-tech-unity", "icon-tech-vercel", "icon-tech-vscode", "icon-tech-vuejs", "icon-tech-wamp", "icon-tech-watchos", "icon-tech-web", "icon-tech-web-push", "icon-tech-webhooks", "icon-tech-webrtc", "icon-tech-websockets", "icon-tech-websub", "icon-tech-xamarin", "icon-tech-xhr-streaming", "icon-tech-xmpp", "icon-tech-zapier", "icon-tech-zeromq"];
|
|
@@ -5384,6 +5419,40 @@ export default _default;
|
|
|
5384
5419
|
//# sourceMappingURL=Logo.d.ts.map
|
|
5385
5420
|
}
|
|
5386
5421
|
|
|
5422
|
+
declare module '@ably/ui/core/Meganav/MeganavBlog' {
|
|
5423
|
+
export type BlogPost = {
|
|
5424
|
+
title: string;
|
|
5425
|
+
link: string;
|
|
5426
|
+
categories: string[];
|
|
5427
|
+
pubDate: string;
|
|
5428
|
+
};
|
|
5429
|
+
export type MeganavBlogProps = {
|
|
5430
|
+
title: string;
|
|
5431
|
+
link: string;
|
|
5432
|
+
posts: BlogPost[];
|
|
5433
|
+
};
|
|
5434
|
+
const MeganavBlog: ({ title, link, posts }: MeganavBlogProps) => import("react/jsx-runtime").JSX.Element;
|
|
5435
|
+
export default MeganavBlog;
|
|
5436
|
+
//# sourceMappingURL=MeganavBlog.d.ts.map
|
|
5437
|
+
}
|
|
5438
|
+
|
|
5439
|
+
declare module '@ably/ui/core/Meganav/MeganavCustomerStories' {
|
|
5440
|
+
export type CustomerStoryHighlight = {
|
|
5441
|
+
companyName: string;
|
|
5442
|
+
companyDesc: string;
|
|
5443
|
+
companyLink: string;
|
|
5444
|
+
companyLogo: string;
|
|
5445
|
+
companyLogoDark?: string;
|
|
5446
|
+
};
|
|
5447
|
+
const MeganavCustomerStories: ({ customerStoriesHighlight, title, link, }: {
|
|
5448
|
+
customerStoriesHighlight: CustomerStoryHighlight;
|
|
5449
|
+
title: string;
|
|
5450
|
+
link: string;
|
|
5451
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
5452
|
+
export default MeganavCustomerStories;
|
|
5453
|
+
//# sourceMappingURL=MeganavCustomerStories.d.ts.map
|
|
5454
|
+
}
|
|
5455
|
+
|
|
5387
5456
|
declare module '@ably/ui/core/Meganav/MeganavMobile' {
|
|
5388
5457
|
import { AccordionData } from ".@ably/ui/core/Accordion/types";
|
|
5389
5458
|
export const MeganavMobile: ({ navItems }: {
|
|
@@ -5394,42 +5463,69 @@ export const MeganavMobile: ({ navItems }: {
|
|
|
5394
5463
|
|
|
5395
5464
|
declare module '@ably/ui/core/Meganav/MeganavPanel' {
|
|
5396
5465
|
import React from "react";
|
|
5397
|
-
import {
|
|
5398
|
-
|
|
5466
|
+
import { FlyoutPanelList } from "@ably/ui/core/data";
|
|
5467
|
+
import { MeganavPanelItemLink } from "@ably/ui/core/MeganavPanelItemLinks";
|
|
5468
|
+
type MeganavPanelProps = {
|
|
5399
5469
|
displayProductTile?: boolean;
|
|
5400
|
-
panelLeft?:
|
|
5401
|
-
|
|
5402
|
-
|
|
5403
|
-
panelRightItems: FlyoutPanelList[];
|
|
5470
|
+
panelLeft?: React.ReactNode;
|
|
5471
|
+
panelMiddleItems?: React.ReactNode;
|
|
5472
|
+
panelRightItems?: MeganavPanelItemLink[];
|
|
5404
5473
|
panelRightBottom?: React.ReactNode;
|
|
5474
|
+
};
|
|
5475
|
+
export const MeganavPanel: ({ displayProductTile, panelLeft, panelMiddleItems, panelRightItems, panelRightBottom, }: MeganavPanelProps) => import("react/jsx-runtime").JSX.Element;
|
|
5476
|
+
export const MeganavPanelFullwidth: ({ panelItems, }: {
|
|
5477
|
+
panelItems: FlyoutPanelList[];
|
|
5405
5478
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
5479
|
+
export {};
|
|
5406
5480
|
//# sourceMappingURL=MeganavPanel.d.ts.map
|
|
5407
5481
|
}
|
|
5408
5482
|
|
|
5409
|
-
declare module '@ably/ui/core/Meganav/
|
|
5410
|
-
import {
|
|
5411
|
-
|
|
5412
|
-
|
|
5413
|
-
|
|
5414
|
-
|
|
5415
|
-
|
|
5483
|
+
declare module '@ably/ui/core/Meganav/MeganavPanelItemLinks' {
|
|
5484
|
+
import { IconName } from ".@ably/ui/core/Icon/types";
|
|
5485
|
+
import { FlyoutPanelList } from "@ably/ui/core/data";
|
|
5486
|
+
export type MeganavPanelItemLink = {
|
|
5487
|
+
label?: string;
|
|
5488
|
+
listItems: FlyoutPanelList[];
|
|
5489
|
+
icon?: IconName;
|
|
5490
|
+
link?: {
|
|
5491
|
+
label: string;
|
|
5492
|
+
link: string;
|
|
5493
|
+
};
|
|
5494
|
+
};
|
|
5495
|
+
const MeganavPanelItemLinks: ({ label, listItems, link, }: MeganavPanelItemLink) => import("react/jsx-runtime").JSX.Element;
|
|
5496
|
+
export default MeganavPanelItemLinks;
|
|
5497
|
+
//# sourceMappingURL=MeganavPanelItemLinks.d.ts.map
|
|
5498
|
+
}
|
|
5499
|
+
|
|
5500
|
+
declare module '@ably/ui/core/Meganav/MeganavTile' {
|
|
5501
|
+
import { ProductName } from ".@ably/ui/core/ProductTile/data";
|
|
5502
|
+
import { IconName } from ".@ably/ui/core/Icon/types";
|
|
5503
|
+
export type MeganavTileProps = {
|
|
5504
|
+
link: string;
|
|
5505
|
+
productName?: ProductName;
|
|
5506
|
+
navLabel?: string;
|
|
5507
|
+
navIcon?: IconName;
|
|
5508
|
+
navDescription?: string;
|
|
5509
|
+
animateIcons?: boolean;
|
|
5510
|
+
showAblyText?: boolean;
|
|
5511
|
+
};
|
|
5512
|
+
const MeganavTile: ({ productName, navLabel, navIcon, navDescription, link, animateIcons, showAblyText, }: MeganavTileProps) => import("react/jsx-runtime").JSX.Element;
|
|
5513
|
+
export default MeganavTile;
|
|
5514
|
+
//# sourceMappingURL=MeganavTile.d.ts.map
|
|
5416
5515
|
}
|
|
5417
5516
|
|
|
5418
5517
|
declare module '@ably/ui/core/Meganav/data' {
|
|
5419
5518
|
import React from "react";
|
|
5420
5519
|
import { IconName } from ".@ably/ui/core/Icon/types";
|
|
5520
|
+
import { CustomerStoryHighlight } from "@ably/ui/core/MeganavCustomerStories";
|
|
5521
|
+
import { BlogPost } from "@ably/ui/core/MeganavBlog";
|
|
5421
5522
|
export type FlyoutPanelList = {
|
|
5422
5523
|
label: string;
|
|
5423
|
-
icon
|
|
5524
|
+
icon?: IconName;
|
|
5424
5525
|
link: string;
|
|
5425
5526
|
isMobile?: boolean;
|
|
5426
|
-
|
|
5427
|
-
|
|
5428
|
-
heading: string;
|
|
5429
|
-
content: string;
|
|
5430
|
-
labelLink: string;
|
|
5431
|
-
url: string;
|
|
5432
|
-
image: string;
|
|
5527
|
+
description?: string;
|
|
5528
|
+
badge?: string;
|
|
5433
5529
|
};
|
|
5434
5530
|
export type MenuItem = {
|
|
5435
5531
|
name: string;
|
|
@@ -5438,6 +5534,11 @@ export type MenuItem = {
|
|
|
5438
5534
|
content?: React.ReactNode;
|
|
5439
5535
|
panelClassName?: string;
|
|
5440
5536
|
};
|
|
5537
|
+
export const productsMenu: FlyoutPanelList[];
|
|
5538
|
+
export const compareMenu: FlyoutPanelList[];
|
|
5539
|
+
export const solutionsMenu: FlyoutPanelList[];
|
|
5540
|
+
export const customerStoriesHighlight: CustomerStoryHighlight;
|
|
5541
|
+
export const companyMenu: FlyoutPanelList[];
|
|
5441
5542
|
export const ablyAwards: {
|
|
5442
5543
|
image: string;
|
|
5443
5544
|
desc: string;
|
|
@@ -5447,7 +5548,7 @@ export const menuItemLinks: {
|
|
|
5447
5548
|
link: string;
|
|
5448
5549
|
isHiddenMobile: boolean;
|
|
5449
5550
|
}[];
|
|
5450
|
-
export const
|
|
5551
|
+
export const defaultBlogPosts: BlogPost[];
|
|
5451
5552
|
export const productsForNav: {
|
|
5452
5553
|
pubsub: {
|
|
5453
5554
|
link: string;
|
|
@@ -5501,8 +5602,24 @@ export const productsForNav: {
|
|
|
5501
5602
|
//# sourceMappingURL=data.d.ts.map
|
|
5502
5603
|
}
|
|
5503
5604
|
|
|
5605
|
+
declare module '@ably/ui/core/Meganav/utils/getMenuItemsForHeader' {
|
|
5606
|
+
import { BlogPost } from ".@ably/ui/core/MeganavBlog";
|
|
5607
|
+
import { MenuItem } from ".@ably/ui/core/data";
|
|
5608
|
+
export const getMenuItemsForHeader: (blogPosts: BlogPost[]) => MenuItem[];
|
|
5609
|
+
//# sourceMappingURL=getMenuItemsForHeader.d.ts.map
|
|
5610
|
+
}
|
|
5611
|
+
|
|
5612
|
+
declare module '@ably/ui/core/Meganav/utils' {
|
|
5613
|
+
export const PanelTitle: ({ title, link, }: {
|
|
5614
|
+
title: string;
|
|
5615
|
+
link?: string;
|
|
5616
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
5617
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
5618
|
+
}
|
|
5619
|
+
|
|
5504
5620
|
declare module '@ably/ui/core/Meganav' {
|
|
5505
5621
|
import { HeaderSessionState, ThemedScrollpoint } from "@ably/ui/core/Header";
|
|
5622
|
+
import { BlogPost } from "@ably/ui/core/Meganav/MeganavBlog";
|
|
5506
5623
|
export type MeganavNoticeBannerProps = {
|
|
5507
5624
|
props: {
|
|
5508
5625
|
title: string;
|
|
@@ -5521,12 +5638,13 @@ export type MeganavNoticeBannerProps = {
|
|
|
5521
5638
|
};
|
|
5522
5639
|
export type MeganavProps = {
|
|
5523
5640
|
sessionState: HeaderSessionState;
|
|
5641
|
+
blogPosts: BlogPost[];
|
|
5524
5642
|
notice?: MeganavNoticeBannerProps;
|
|
5525
5643
|
theme?: string;
|
|
5526
5644
|
themedScrollpoints?: ThemedScrollpoint[];
|
|
5527
5645
|
onNoticeClose?: () => void;
|
|
5528
5646
|
};
|
|
5529
|
-
const Meganav: ({ sessionState, notice, theme, themedScrollpoints, onNoticeClose, }: MeganavProps) => import("react/jsx-runtime").JSX.Element;
|
|
5647
|
+
const Meganav: ({ sessionState, notice, theme, themedScrollpoints, onNoticeClose, blogPosts, }: MeganavProps) => import("react/jsx-runtime").JSX.Element;
|
|
5530
5648
|
export default Meganav;
|
|
5531
5649
|
//# sourceMappingURL=Meganav.d.ts.map
|
|
5532
5650
|
}
|
|
@@ -5674,9 +5792,10 @@ type ProductLabelProps = {
|
|
|
5674
5792
|
selected?: boolean;
|
|
5675
5793
|
numericalSize: number;
|
|
5676
5794
|
showLabel?: boolean;
|
|
5795
|
+
showAblyText?: boolean;
|
|
5677
5796
|
className?: string;
|
|
5678
5797
|
};
|
|
5679
|
-
const ProductLabel: ({ label, unavailable, selected, numericalSize, showLabel, className, }: ProductLabelProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
5798
|
+
const ProductLabel: ({ label, unavailable, selected, numericalSize, showLabel, showAblyText, className, }: ProductLabelProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
5680
5799
|
export default ProductLabel;
|
|
5681
5800
|
//# sourceMappingURL=ProductLabel.d.ts.map
|
|
5682
5801
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ably/ui",
|
|
3
|
-
"version": "17.10.
|
|
3
|
+
"version": "17.10.1-dev.26bd7a31",
|
|
4
4
|
"description": "Home of the Ably design system library ([design.ably.com](https://design.ably.com)). It provides a showcase, development/test environment and a publishing pipeline for different distributables.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -12,9 +12,7 @@
|
|
|
12
12
|
"reset",
|
|
13
13
|
"tailwind.config.js",
|
|
14
14
|
"tailwind.extend.js",
|
|
15
|
-
"index.d.ts"
|
|
16
|
-
"AGENTS.md",
|
|
17
|
-
"CLAUDE.md"
|
|
15
|
+
"index.d.ts"
|
|
18
16
|
],
|
|
19
17
|
"types": "index.d.ts",
|
|
20
18
|
"msw": {
|
package/AGENTS.md
DELETED
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
# Agent Development Guide
|
|
2
|
-
|
|
3
|
-
This file is not necessarily for people, the intended audience is automated agents.
|
|
4
|
-
|
|
5
|
-
## Other references
|
|
6
|
-
|
|
7
|
-
Consider the content of `README.md` as well, it contains technical information
|
|
8
|
-
used by contributors to this project, as well as consumers of this project
|
|
9
|
-
|
|
10
|
-
## Consumers
|
|
11
|
-
|
|
12
|
-
This project is intended to primarily be consumed by the Ably website, voltaire
|
|
13
|
-
& docs projects. It is distributed via NPM as the `@ably/ui` package.
|
|
14
|
-
|
|
15
|
-
## Build & Test Commands
|
|
16
|
-
|
|
17
|
-
- `pnpm build` - Build the library (prebuild, icons, swc, tsc, cleanup)
|
|
18
|
-
- `pnpm test` - Run all tests with Vitest
|
|
19
|
-
- `pnpm test -- src/core/insights/index.test.ts` - Run a single test file
|
|
20
|
-
- `pnpm lint` - Run ESLint on all files
|
|
21
|
-
- `pnpm format:check` - Check formatting with Prettier
|
|
22
|
-
- `pnpm format:write` - Auto-format all files with Prettier
|
|
23
|
-
- `pnpm storybook` - Start Storybook dev server on port 6006
|
|
24
|
-
- `pnpm start` - Start Vite dev server on port 5000
|
|
25
|
-
|
|
26
|
-
## Code Style
|
|
27
|
-
|
|
28
|
-
- **Language**: TypeScript with strict mode enabled
|
|
29
|
-
- **React**: Use functional components with hooks; React 18.x
|
|
30
|
-
- **Imports**: Default export for main component, named exports for types/utils
|
|
31
|
-
- **Naming**: PascalCase for components/types, camelCase for functions/variables,
|
|
32
|
-
kebab-case for files
|
|
33
|
-
- **Types**: Define prop types as `ComponentNameProps`, use `PropsWithChildren<T>`
|
|
34
|
-
when needed
|
|
35
|
-
- **Styling**: Tailwind 3.4.
|
|
36
|
-
- **Utility**: Use `cn()` from `./src/core/utils/cn` for className merging (clsx
|
|
37
|
-
& tailwind-merge)
|
|
38
|
-
- **Formatting**: Prettier defaults (no config = defaults), 2-space indent
|
|
39
|
-
- **Error Handling**: Wrap external service calls in try-catch, log with logger module
|
|
40
|
-
- **Comments**: JSDoc for props, inline comments for complex logic
|
|
41
|
-
|
|
42
|
-
Keep emojis in the code to a minimum, only introduce them if there is precedent
|
|
43
|
-
in the file you're working on.
|
|
44
|
-
|
|
45
|
-
Comments and commit messages should not include statements like "local tests pass",
|
|
46
|
-
this is a given for how we work.
|
|
47
|
-
|
|
48
|
-
## Development
|
|
49
|
-
|
|
50
|
-
- Run `pnpm lint` & `pnpm format:write` on files after making changes, we lint
|
|
51
|
-
files in CI and don't want preventable failures. `pnpm lint:fix` should also
|
|
52
|
-
apply our formatting rules while trying to fix most things for you
|
|
53
|
-
- Run tests with `pnpm test` after making file changes
|
|
54
|
-
|
|
55
|
-
## Styling Guide
|
|
56
|
-
|
|
57
|
-
### Color Palettes
|
|
58
|
-
|
|
59
|
-
The design system uses semantic color palettes defined in `src/core/styles/properties.css`
|
|
60
|
-
and configured for Tailwind in `tailwind.config.js`. Each palette has a different
|
|
61
|
-
number of color values:
|
|
62
|
-
|
|
63
|
-
- **Neutral**: 000, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300 (14 values)
|
|
64
|
-
- **Orange**: 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100 (11 values)
|
|
65
|
-
- **Yellow**: 100, 200, 300, 400, 500, 600, 700, 800, 900 (9 values)
|
|
66
|
-
- **Green**: 100, 200, 300, 400, 500, 600, 700, 800, 900 (9 values)
|
|
67
|
-
- **Blue**: 100, 200, 300, 400, 500, 600, 700, 800, 900 (9 values)
|
|
68
|
-
- **Violet**: 100, 200, 300, 400, 500, 600, 700, 800, 900 (9 values)
|
|
69
|
-
- **Pink**: 100, 200, 300, 400, 500, 600, 700, 800, 900 (9 values)
|
|
70
|
-
|
|
71
|
-
### Interactive Element Styling Patterns
|
|
72
|
-
|
|
73
|
-
When developing components with @ably/ui, **always** use Tailwind classes following
|
|
74
|
-
these established patterns to ensure consistent interactive behavior across light
|
|
75
|
-
and dark modes:
|
|
76
|
-
|
|
77
|
-
#### Dark Mode Mirroring
|
|
78
|
-
|
|
79
|
-
For any given color, add a dark mode class that mirrors it across the palette.
|
|
80
|
-
Lower values (lighter colors) in light mode should map to higher values (darker
|
|
81
|
-
colors) in dark mode, and vice versa.
|
|
82
|
-
|
|
83
|
-
**Examples:**
|
|
84
|
-
|
|
85
|
-
- `bg-neutral-100` pairs with `dark:bg-neutral-1200`
|
|
86
|
-
- `bg-neutral-200` pairs with `dark:bg-neutral-1100`
|
|
87
|
-
- `bg-neutral-1200` pairs with `dark:bg-neutral-100`
|
|
88
|
-
- `text-neutral-1300` pairs with `dark:text-neutral-000`
|
|
89
|
-
- `bg-orange-200` pairs with `dark:bg-orange-900` (orange has 11 values: 200 + 900 = 1100)
|
|
90
|
-
- `bg-blue-300` pairs with `dark:bg-blue-700` (blue has 9 values: 300 + 700 = 1000)
|
|
91
|
-
|
|
92
|
-
The sum of mirrored color numbers should equal the total palette range. Different
|
|
93
|
-
palettes have different ranges, so calculate mirrors accordingly:
|
|
94
|
-
|
|
95
|
-
- Neutral (000-1300): `light + dark = 1300`
|
|
96
|
-
- Orange (100-1100): `light + dark = 1200`
|
|
97
|
-
- Secondary colors (100-900): `light + dark = 1000`
|
|
98
|
-
|
|
99
|
-
#### Hover States
|
|
100
|
-
|
|
101
|
-
Use the **next color value** along the palette for hover states:
|
|
102
|
-
|
|
103
|
-
- `bg-neutral-100` → `hover:bg-neutral-200`
|
|
104
|
-
- `bg-neutral-200` → `hover:bg-neutral-300`
|
|
105
|
-
- `bg-orange-600` → `hover:bg-orange-700`
|
|
106
|
-
|
|
107
|
-
Apply this pattern to both light and dark mode classes:
|
|
108
|
-
|
|
109
|
-
```
|
|
110
|
-
bg-neutral-200 hover:bg-neutral-300
|
|
111
|
-
dark:bg-neutral-1100 dark:hover:bg-neutral-1000
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
#### Active States
|
|
115
|
-
|
|
116
|
-
Use **two color values** along the palette for active/pressed states:
|
|
117
|
-
|
|
118
|
-
- `bg-neutral-100` → `active:bg-neutral-300`
|
|
119
|
-
- `bg-neutral-200` → `active:bg-neutral-400`
|
|
120
|
-
- `bg-orange-600` → `active:bg-orange-800`
|
|
121
|
-
|
|
122
|
-
Apply to both modes:
|
|
123
|
-
|
|
124
|
-
```
|
|
125
|
-
bg-neutral-200 hover:bg-neutral-300 active:bg-neutral-400
|
|
126
|
-
dark:bg-neutral-1100 dark:hover:bg-neutral-1000 dark:active:bg-neutral-900
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
#### Focus Styles
|
|
130
|
-
|
|
131
|
-
Add the `focus-base` class to all interactive elements (buttons, links, inputs,
|
|
132
|
-
selects, etc.). This class is defined in `src/core/styles/utils.css` and provides
|
|
133
|
-
consistent focus styling with an accessible outline:
|
|
134
|
-
|
|
135
|
-
```css
|
|
136
|
-
.focus-base {
|
|
137
|
-
@apply focus:outline-none focus-visible:outline-4 focus-visible:outline-offset-0 focus-visible:outline-gui-focus;
|
|
138
|
-
}
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
#### Transitions
|
|
142
|
-
|
|
143
|
-
Add `transition-colors` to interactive elements unless a higher-specificity
|
|
144
|
-
`transition` class is already present (e.g., `transition-all`, `transition-transform`).
|
|
145
|
-
This ensures smooth visual feedback for state changes.
|
|
146
|
-
|
|
147
|
-
### Complete Example
|
|
148
|
-
|
|
149
|
-
Here's a complete button component demonstrating all patterns:
|
|
150
|
-
|
|
151
|
-
```tsx
|
|
152
|
-
<button
|
|
153
|
-
className={cn(
|
|
154
|
-
"px-4 py-2 rounded",
|
|
155
|
-
"bg-neutral-200 hover:bg-neutral-300 active:bg-neutral-400",
|
|
156
|
-
"dark:bg-neutral-1100 dark:hover:bg-neutral-1000 dark:active:bg-neutral-900",
|
|
157
|
-
"text-neutral-1300 dark:text-neutral-000",
|
|
158
|
-
"focus-base transition-colors",
|
|
159
|
-
)}
|
|
160
|
-
>
|
|
161
|
-
Click me
|
|
162
|
-
</button>
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
### Additional Examples
|
|
166
|
-
|
|
167
|
-
**Select dropdown:**
|
|
168
|
-
|
|
169
|
-
```tsx
|
|
170
|
-
<Select.Trigger
|
|
171
|
-
className="bg-neutral-200 hover:bg-neutral-300 active:bg-neutral-400 dark:bg-neutral-1100 dark:hover:bg-neutral-1000 dark:active:bg-neutral-900 focus-base transition-colors border border-neutral-300 dark:border-neutral-1000"
|
|
172
|
-
>
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
**Badge with orange:**
|
|
176
|
-
|
|
177
|
-
```tsx
|
|
178
|
-
<span
|
|
179
|
-
className="bg-orange-200 hover:bg-orange-300 active:bg-orange-400 dark:bg-orange-900 dark:hover:bg-orange-800 dark:active:bg-orange-700 focus-base transition-colors"
|
|
180
|
-
>
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
**Toggle/Switch:**
|
|
184
|
-
|
|
185
|
-
```tsx
|
|
186
|
-
<Switch
|
|
187
|
-
className="bg-neutral-600 hover:bg-neutral-700 active:bg-neutral-800 data-[state=checked]:bg-orange-600 data-[state=checked]:hover:bg-orange-700 data-[state=checked]:active:bg-orange-800 focus-base transition-colors"
|
|
188
|
-
>
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
## Git workflow
|
|
192
|
-
|
|
193
|
-
- Always do work on a new branch, start the branch on the HEAD of `origin/main`
|
|
194
|
-
- Before pushing the branch run the tests and linters to ensure they are happy
|
|
195
|
-
- When updating a branch, rebase on `origin/main` and force-push (with lease)
|
|
196
|
-
- Use our PR template in the `.github` folder as a reference for the pull request
|
|
197
|
-
- Keep commit messages concise
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import React from"react";import cn from"../utils/cn";import{products}from"../ProductTile/data";import ProductIcon from"../ProductTile/ProductIcon";import ProductLabel from"../ProductTile/ProductLabel";import ProductDescription from"../ProductTile/ProductDescription";const CONTAINER_GAP_RATIO=3;const MeganavProductTile=({name,productLink,showDescription=true,showLabel=true,size="40px",animateIcons=false})=>{const{icon,hoverIcon,label,unavailable,description}=products[name]??{};const numericalSize=parseInt(size,10);return React.createElement("a",{href:productLink?productLink:"#",className:cn("transition-colors group/product-tile","flex flex-col p-3 rounded-lg gap-2","bg-neutral-000 dark:bg-neutral-1300",{"hover:bg-neutral-100 dark:hover:bg-neutral-1200":!unavailable},{"pointer-events-auto":!unavailable},{"pointer-events-none":unavailable}),"aria-hidden":unavailable},React.createElement("span",{className:cn("items-center flex"),style:{gap:numericalSize/CONTAINER_GAP_RATIO}},React.createElement(ProductIcon,{size:numericalSize,name:icon,hoverName:animateIcons?hoverIcon:undefined,unavailable:!!unavailable,selected:false}),React.createElement(ProductLabel,{label:label,unavailable:!!unavailable,numericalSize:numericalSize,showLabel:showLabel,selected:false})),React.createElement(ProductDescription,{description:description,unavailable:!!unavailable,showDescription:showDescription,selected:false}))};export default MeganavProductTile;
|
|
2
|
-
//# sourceMappingURL=MeganavProductTile.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/Meganav/MeganavProductTile.tsx"],"sourcesContent":["import React from \"react\";\nimport cn from \"../utils/cn\";\nimport { products } from \"../ProductTile/data\";\nimport ProductIcon from \"../ProductTile/ProductIcon\";\nimport ProductLabel from \"../ProductTile/ProductLabel\";\nimport ProductDescription from \"../ProductTile/ProductDescription\";\nimport { ProductTileProps } from \"../ProductTile\";\n\nconst CONTAINER_GAP_RATIO = 3;\n\nconst MeganavProductTile = ({\n name,\n productLink,\n showDescription = true,\n showLabel = true,\n size = \"40px\",\n animateIcons = false,\n}: ProductTileProps & { productLink?: string }) => {\n const { icon, hoverIcon, label, unavailable, description } =\n products[name] ?? {};\n const numericalSize = parseInt(size, 10);\n\n return (\n <a\n href={productLink ? productLink : \"#\"}\n className={cn(\n \"transition-colors group/product-tile\",\n \"flex flex-col p-3 rounded-lg gap-2\",\n \"bg-neutral-000 dark:bg-neutral-1300\",\n {\n \"hover:bg-neutral-100 dark:hover:bg-neutral-1200\": !unavailable,\n },\n { \"pointer-events-auto\": !unavailable },\n { \"pointer-events-none\": unavailable },\n )}\n aria-hidden={unavailable}\n >\n <span\n className={cn(\"items-center flex\")}\n style={{\n gap: numericalSize / CONTAINER_GAP_RATIO,\n }}\n >\n <ProductIcon\n size={numericalSize}\n name={icon}\n hoverName={animateIcons ? hoverIcon : undefined}\n unavailable={!!unavailable}\n selected={false}\n />\n <ProductLabel\n label={label}\n unavailable={!!unavailable}\n numericalSize={numericalSize}\n showLabel={showLabel}\n selected={false}\n />\n </span>\n <ProductDescription\n description={description}\n unavailable={!!unavailable}\n showDescription={showDescription}\n selected={false}\n />\n </a>\n );\n};\n\nexport default MeganavProductTile;\n"],"names":["React","cn","products","ProductIcon","ProductLabel","ProductDescription","CONTAINER_GAP_RATIO","MeganavProductTile","name","productLink","showDescription","showLabel","size","animateIcons","icon","hoverIcon","label","unavailable","description","numericalSize","parseInt","a","href","className","aria-hidden","span","style","gap","hoverName","undefined","selected"],"mappings":"AAAA,OAAOA,UAAW,OAAQ,AAC1B,QAAOC,OAAQ,aAAc,AAC7B,QAASC,QAAQ,KAAQ,qBAAsB,AAC/C,QAAOC,gBAAiB,4BAA6B,AACrD,QAAOC,iBAAkB,6BAA8B,AACvD,QAAOC,uBAAwB,mCAAoC,CAGnE,MAAMC,oBAAsB,EAE5B,MAAMC,mBAAqB,CAAC,CAC1BC,IAAI,CACJC,WAAW,CACXC,gBAAkB,IAAI,CACtBC,UAAY,IAAI,CAChBC,KAAO,MAAM,CACbC,aAAe,KAAK,CACwB,IAC5C,KAAM,CAAEC,IAAI,CAAEC,SAAS,CAAEC,KAAK,CAAEC,WAAW,CAAEC,WAAW,CAAE,CACxDhB,QAAQ,CAACM,KAAK,EAAI,CAAC,EACrB,MAAMW,cAAgBC,SAASR,KAAM,IAErC,OACE,oBAACS,KACCC,KAAMb,YAAcA,YAAc,IAClCc,UAAWtB,GACT,uCACA,qCACA,sCACA,CACE,kDAAmD,CAACgB,WACtD,EACA,CAAE,sBAAuB,CAACA,WAAY,EACtC,CAAE,sBAAuBA,WAAY,GAEvCO,cAAaP,aAEb,oBAACQ,QACCF,UAAWtB,GAAG,qBACdyB,MAAO,CACLC,IAAKR,cAAgBb,mBACvB,GAEA,oBAACH,aACCS,KAAMO,cACNX,KAAMM,KACNc,UAAWf,aAAeE,UAAYc,UACtCZ,YAAa,CAAC,CAACA,YACfa,SAAU,QAEZ,oBAAC1B,cACCY,MAAOA,MACPC,YAAa,CAAC,CAACA,YACfE,cAAeA,cACfR,UAAWA,UACXmB,SAAU,SAGd,oBAACzB,oBACCa,YAAaA,YACbD,YAAa,CAAC,CAACA,YACfP,gBAAiBA,gBACjBoB,SAAU,QAIlB,CAEA,gBAAevB,kBAAmB"}
|
|
Binary file
|
|
Binary file
|