diff --git a/examples/package.json b/examples/package.json
index 77101c4a2e..896fd79730 100644
--- a/examples/package.json
+++ b/examples/package.json
@@ -43,6 +43,7 @@
"pub-sub-presence/javascript",
"pub-sub-rewind/react",
"pub-sub-rewind/javascript",
+ "pub-sub-message-annotations/javascript",
"spaces-avatar-stack/react",
"spaces-avatar-stack/javascript",
"spaces-component-locking/react",
@@ -90,6 +91,7 @@
"pub-sub-presence-react": "yarn workspace pub-sub-presence-react dev",
"pub-sub-rewind-javascript": "yarn workspace pub-sub-rewind-javascript dev",
"pub-sub-rewind-react": "yarn workspace pub-sub-rewind-react dev",
+ "pub-sub-message-annotations-javascript": "yarn workspace pub-sub-message-annotations-javascript dev",
"spaces-avatar-stack-javascript": "yarn workspace spaces-avatar-stack-javascript dev",
"spaces-avatar-stack-react": "yarn workspace spaces-avatar-stack-react dev",
"spaces-component-locking-javascript": "yarn workspace spaces-component-locking-javascript dev",
@@ -103,7 +105,7 @@
"@ably/chat": "^0.14.0",
"@ably/chat-react-ui-components": "^0.1.2",
"@ably/spaces": "^0.4.0",
- "ably": "^2.9.0",
+ "ably": "^2.13.0",
"cors": "^2.8.5",
"franken-ui": "^2.0.0",
"minifaker": "^1.34.1",
diff --git a/examples/pub-sub-message-annotations/javascript/.gitignore b/examples/pub-sub-message-annotations/javascript/.gitignore
new file mode 100644
index 0000000000..fd3dbb571a
--- /dev/null
+++ b/examples/pub-sub-message-annotations/javascript/.gitignore
@@ -0,0 +1,36 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+.yarn/install-state.gz
+
+# testing
+/coverage
+
+# next.js
+/.next/
+/out/
+
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# local env files
+.env*.local
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
diff --git a/examples/pub-sub-message-annotations/javascript/README.md b/examples/pub-sub-message-annotations/javascript/README.md
new file mode 100644
index 0000000000..dd15390475
--- /dev/null
+++ b/examples/pub-sub-message-annotations/javascript/README.md
@@ -0,0 +1,87 @@
+# Adding annotations to messages with Pub/Sub
+
+Enable users to annotate messages with additional data, such as reactions, flags, or other contextual information without modifying the original message content.
+
+Message annotations provide a powerful way to extend messages with additional information. Unlike editing a message, annotations allow multiple clients to add their own metadata while preserving the original message. This is ideal for implementing features like reactions, content categorization, moderation flags, or any other metadata that enhances message context.
+
+Message annotations are implemented using [Ably Pub/Sub](/docs/channels). The Pub/Sub SDK with annotations provides a way to add structured metadata to messages, with support for different annotation types and automatic summarization.
+
+## Resources
+
+Use the following methods to work with message annotations in a pub/sub application:
+
+- [`channels.get()`](/docs/channels#create) - creates a new or retrieves an existing `channel`. Specify the `ANNOTATION_PUBLISH` and `ANNOTATION_SUBSCRIBE` modes to publish and subscribe to message annotations.
+- [`channel.subscribe()`](/docs/pub-sub#subscribe) - subscribes to message events within a specific channel by registering a listener. Message events with a `message.create` action are received when a user publishes a message. Message events with a `message.summary` action are received when a user publishes or deletes an annotation.
+
+- `channel.annotations.publish()` - publishes an annotation for a specific message
+- `channel.annotations.subscribe()` - subscribes to receive individual annotation events
+- `channel.annotations.delete()` - deletes a previously published annotation
+
+
+Find out more about annotations.
+
+## Annotation Types
+
+This example demonstrates five common annotation types, each suited to different use cases:
+
+
+
+## Features
+
+This example demonstrates:
+
+1. Publishing regular messages to a channel
+2. Adding different types of annotations to messages
+3. Viewing both summarized and raw annotation data
+4. Deleting annotations
+
+## Getting started
+
+1. Clone the [Ably docs](https://github.com/ably/docs) repository where this example can be found:
+
+ ```sh
+ git clone git@github.com:ably/docs.git
+ ```
+
+2. Change directory:
+
+ ```sh
+ cd /examples/
+ ```
+
+3. Rename the environment file:
+
+ ```sh
+ mv .env.example .env.local
+ ```
+
+4. In `.env.local` update the value of `VITE_ABLY_KEY` to be your Ably API key.
+
+5. Install dependencies:
+
+ ```sh
+ yarn install
+ ```
+
+6. Enable the "Annotations, updates and deletes" channel rule that matches the channel name you'll be using (by default we use a channel name of `annotation:pub-sub-message-annotations`, so if using this, [create this rule](https://ably.com/docs/channels#rules) for the "annotation" channel namespace).
+
+7. Run the server:
+
+ ```sh
+ yarn run pub-sub-message-annotations-javascript
+ ```
+
+8. Try it out by opening two tabs to [http://localhost:5173/](http://localhost:5173/) with your browser to see the result. Specify different client IDs in the URL (e.g., `?clientId=user1` and `?clientId=user2`) to see how annotations from different clients are handled and summarized
+
+## How to use this example
+
+1. Enter a message in the input field and click "Publish" to send it to the channel
+2. Click on a message to expand it and reveal the annotation interface
+3. Select an annotation type, enter a value, and click "Publish" to add an annotation
+4. Switch between the "Summary" and "Raw Annotations" tabs to see different views
+5. Open the example in multiple browser tabs with different client IDs (e.g., `?clientId=user1` and `?clientId=user2`) to see how annotations from different clients are handled and summarized
+6. Delete annotations by clicking the trash icon in the raw annotations view and see how the summary is updated
+
+## Open in CodeSandbox
+
+In CodeSandbox, rename the `.env.example` file to `.env.local` and update the value of your `VITE_ABLY_KEY` variable to use your Ably API key.
diff --git a/examples/pub-sub-message-annotations/javascript/index.html b/examples/pub-sub-message-annotations/javascript/index.html
new file mode 100644
index 0000000000..9dccae7e19
--- /dev/null
+++ b/examples/pub-sub-message-annotations/javascript/index.html
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+ Pub/Sub message annotations
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/pub-sub-message-annotations/javascript/package.json b/examples/pub-sub-message-annotations/javascript/package.json
new file mode 100644
index 0000000000..66b618545f
--- /dev/null
+++ b/examples/pub-sub-message-annotations/javascript/package.json
@@ -0,0 +1,11 @@
+{
+ "name": "pub-sub-message-annotations-javascript",
+ "version": "1.0.0",
+ "main": "index.js",
+ "license": "MIT",
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc && vite build",
+ "preview": "vite preview"
+ }
+}
diff --git a/examples/pub-sub-message-annotations/javascript/src/ably.ts b/examples/pub-sub-message-annotations/javascript/src/ably.ts
new file mode 100644
index 0000000000..0fc039ff15
--- /dev/null
+++ b/examples/pub-sub-message-annotations/javascript/src/ably.ts
@@ -0,0 +1,33 @@
+import * as Ably from 'ably';
+import { clientId, channelName } from './config';
+
+// Singleton Ably client instance
+let client: Ably.Realtime | null = null;
+
+// Lazily creates and returns the Ably client instance with configured clientId
+function getClient(): Ably.Realtime {
+ if (!client) {
+ client = new Ably.Realtime({
+ clientId,
+ key: import.meta.env.VITE_ABLY_KEY as string,
+ });
+ }
+ return client;
+}
+
+// Returns the configured channel with all annotation modes enabled
+export function getChannel() {
+ return getClient().channels.get(`annotation:${channelName}`, {
+ modes: ['PUBLISH', 'SUBSCRIBE', 'ANNOTATION_PUBLISH', 'ANNOTATION_SUBSCRIBE'],
+ });
+}
+
+// Publishes a new annotation for a specific message
+export function publishAnnotation(message: Ably.InboundMessage, annotation: Ably.OutboundAnnotation) {
+ return getChannel().annotations.publish(message, annotation);
+}
+
+// Deletes a specific annotation from a message
+export function deleteAnnotation(messageSerial: string, annotation: Ably.OutboundAnnotation) {
+ return getChannel().annotations.delete(messageSerial, annotation);
+}
diff --git a/examples/pub-sub-message-annotations/javascript/src/components/annotations.ts b/examples/pub-sub-message-annotations/javascript/src/components/annotations.ts
new file mode 100644
index 0000000000..7283aa2d00
--- /dev/null
+++ b/examples/pub-sub-message-annotations/javascript/src/components/annotations.ts
@@ -0,0 +1,146 @@
+// Components for displaying and managing raw annotation messages
+
+import type { Annotation } from 'ably';
+import { findAnnotationType } from '../config';
+import { createBadge } from './badge';
+import { deleteAnnotation } from '../ably';
+
+function formatTimestamp(timestamp: number): string {
+ const date = new Date(timestamp);
+ return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' });
+}
+
+// Extracts the type key from a namespaced annotation type string (e.g. "my-annotations:total.v1" → "total.v1")
+export function getAnnotationTypeKey(fullType: string): string {
+ const parts = fullType.split(':');
+ if (parts.length > 1) {
+ return parts[1];
+ }
+ return fullType;
+}
+
+// Component to display a single annotation with all its details
+// Includes the annotation type, value, action, client ID, timestamp, and
+// a delete button for annotations with an annotation.create action
+function createAnnotationItem(annotation: Annotation) {
+ const typeKey = getAnnotationTypeKey(annotation.type);
+ const { color, label } = findAnnotationType(typeKey);
+
+ const item = document.createElement('div');
+ item.className = `pl-3 pr-2 py-2 border-l-4 border-l-${color}-500 border-y border-r border-gray-200 bg-white shadow-sm flex flex-wrap items-center`;
+ item.setAttribute('data-id', annotation.id);
+ item.setAttribute('data-timestamp', annotation.timestamp.toString());
+ item.setAttribute('data-serial', annotation.messageSerial);
+ item.setAttribute('data-action', annotation.action || '');
+
+ // First row: type, value (left aligned) and delete button (right aligned)
+ const firstRow = document.createElement('div');
+ firstRow.className = 'flex justify-between items-center w-full';
+
+ const leftContent = document.createElement('div');
+ leftContent.className = 'flex items-center gap-2 min-w-0 flex-grow';
+
+ const typeLabel = document.createElement('span');
+ typeLabel.className = `text-sm font-medium text-${color}-800`;
+ typeLabel.textContent = label;
+ leftContent.appendChild(typeLabel);
+
+ const valueContent = document.createElement('span');
+ valueContent.className = 'text-sm text-gray-700 overflow-hidden text-ellipsis';
+ valueContent.textContent = annotation.name || 'unknown';
+ leftContent.appendChild(valueContent);
+
+ firstRow.appendChild(leftContent);
+
+ if (annotation.action !== 'annotation.delete') {
+ const deleteIcon = document.createElement('div');
+ deleteIcon.className = 'size-4 text-red-500 hover:text-red-800 cursor-pointer shrink-0 ml-auto';
+ deleteIcon.innerHTML = ' ';
+ deleteIcon.addEventListener('click', (e) => {
+ e.preventDefault();
+ deleteAnnotation(annotation.messageSerial, annotation);
+ });
+ firstRow.appendChild(deleteIcon);
+ }
+
+ item.appendChild(firstRow);
+
+ // Second row: action (left aligned) and client ID with timestamp (right aligned)
+ const secondRow = document.createElement('div');
+ secondRow.className = 'flex justify-between items-center w-full mt-1';
+
+ let action = 'CREATE';
+ let actionColor = 'green';
+ if (annotation.action === 'annotation.delete') {
+ action = 'DELETE';
+ actionColor = 'red';
+ }
+ const actionBadge = createBadge(action, actionColor);
+ secondRow.appendChild(actionBadge);
+
+ const rightContent = document.createElement('div');
+ rightContent.className = 'flex items-center gap-2 ml-auto shrink-0';
+
+ const clientBadge = createBadge(annotation.clientId || 'unknown', 'gray');
+ clientBadge.classList.add('shrink-0');
+ rightContent.appendChild(clientBadge);
+
+ const timestamp = document.createElement('div');
+ timestamp.className = 'text-xs text-gray-500';
+ timestamp.textContent = formatTimestamp(annotation.timestamp);
+ rightContent.appendChild(timestamp);
+
+ secondRow.appendChild(rightContent);
+
+ item.appendChild(secondRow);
+
+ return item;
+}
+
+// Component for listing annotations related to a specific message
+// Includes an empty state message that will be removed when annotations are added
+export function createAnnotationsListElement(messageSerial: string) {
+ const annotationsList = document.createElement('div');
+ annotationsList.className = 'space-y-1 max-h-80 overflow-y-auto';
+ annotationsList.id = `annotations-list-${messageSerial}`;
+ annotationsList.setAttribute('data-message-serial', messageSerial);
+
+ const emptyState = document.createElement('div');
+ emptyState.className = 'text-center p-2 text-gray-500 text-sm';
+ emptyState.textContent = 'No annotations received yet.';
+ emptyState.id = `annotations-empty-${messageSerial}`;
+
+ annotationsList.appendChild(emptyState);
+
+ return annotationsList;
+}
+
+// Adds a new annotation to the appropriate message's annotation list
+export function addAnnotation(annotation: Annotation) {
+ const messageSerial = annotation.messageSerial;
+ const listContainer = document.getElementById(`annotations-list-${messageSerial}`);
+
+ if (!listContainer) {
+ return;
+ }
+
+ // Check if we already have an annotation with the same ID and action
+ const existingAnnotation = document.querySelector(`[data-id="${annotation.id}"][data-action="${annotation.action || ''}"]`);
+ if (existingAnnotation) {
+ return;
+ }
+
+ const emptyState = document.getElementById(`annotations-empty-${messageSerial}`);
+ if (emptyState) {
+ emptyState.remove();
+ }
+
+ const annotationItem = createAnnotationItem(annotation);
+
+ // Add at the beginning (newest first)
+ if (listContainer.firstChild) {
+ listContainer.insertBefore(annotationItem, listContainer.firstChild);
+ return;
+ }
+ listContainer.appendChild(annotationItem);
+}
diff --git a/examples/pub-sub-message-annotations/javascript/src/components/arrow.ts b/examples/pub-sub-message-annotations/javascript/src/components/arrow.ts
new file mode 100644
index 0000000000..43f663965a
--- /dev/null
+++ b/examples/pub-sub-message-annotations/javascript/src/components/arrow.ts
@@ -0,0 +1,32 @@
+// Creates and manages SVG arrow icons for dropdown interactions
+
+export function createDropdownArrow(color: string) {
+ const svgNS = 'http://www.w3.org/2000/svg';
+ const svg = document.createElementNS(svgNS, 'svg');
+ svg.setAttribute('class', `h-4 w-4 text-${color}-500 transform transition-transform duration-200`);
+ svg.setAttribute('fill', 'none');
+ svg.setAttribute('viewBox', '0 0 24 24');
+ svg.setAttribute('stroke', 'currentColor');
+
+ const path = document.createElementNS(svgNS, 'path');
+ path.setAttribute('stroke-linecap', 'round');
+ path.setAttribute('stroke-linejoin', 'round');
+ path.setAttribute('stroke-width', '2');
+ path.setAttribute('d', 'M19 9l-7 7-7-7');
+
+ svg.appendChild(path);
+ return svg;
+}
+
+export function rotateArrow(arrow: SVGElement, expanded: boolean) {
+ if (expanded) {
+ arrow.classList.add('rotate-180');
+ } else {
+ arrow.classList.remove('rotate-180');
+ }
+}
+
+export function toggleArrowRotation(arrow: SVGElement) {
+ arrow.classList.toggle('rotate-180');
+ return arrow.classList.contains('rotate-180');
+}
diff --git a/examples/pub-sub-message-annotations/javascript/src/components/badge.ts b/examples/pub-sub-message-annotations/javascript/src/components/badge.ts
new file mode 100644
index 0000000000..fac071d2d6
--- /dev/null
+++ b/examples/pub-sub-message-annotations/javascript/src/components/badge.ts
@@ -0,0 +1,55 @@
+// Components for displaying client IDs and counts from annotation summaries
+
+export function createCountBadge(count: number, color: string, isRounded = true) {
+ const badge = document.createElement('span');
+ badge.className = `ml-2 inline-flex items-center px-2 py-0.5 text-xs font-medium bg-${color}-100 text-${color}-800`;
+ badge.textContent = `${count}`;
+ badge.classList.add(isRounded ? 'rounded-full' : 'rounded');
+ return badge;
+}
+
+export function createBadge(name: string, color: string) {
+ const badge = document.createElement('span');
+ badge.className = `inline-flex items-center px-2 py-0.5 rounded-full text-xs bg-${color}-100 text-${color}-800`;
+ badge.textContent = name;
+ return badge;
+}
+
+export function createBadgeWithCount(name: string, count: number, color: string) {
+ const badgeGroup = document.createElement('div');
+ badgeGroup.className = 'inline-flex rounded-full overflow-hidden text-xs font-medium shadow-sm';
+
+ const clientIdPart = document.createElement('span');
+ clientIdPart.className = `px-2 py-0.5 bg-${color}-100 text-${color}-800`;
+ clientIdPart.textContent = name;
+
+ const countPart = document.createElement('span');
+ countPart.className = `px-1.5 py-0.5 bg-${color}-400 text-white`;
+ countPart.textContent = `${count}`;
+
+ badgeGroup.appendChild(clientIdPart);
+ badgeGroup.appendChild(countPart);
+ return badgeGroup;
+}
+
+export function createClientBadges(clients: string[], color: string) {
+ const badges = document.createElement('div');
+ badges.className = 'flex flex-wrap gap-1';
+ for (const id of clients) {
+ const badge = createBadge(id, color);
+ badges.appendChild(badge);
+ }
+ return badges;
+}
+
+export function createClientBadgesWithCounts(clientIds: Record, color: string) {
+ const container = document.createElement('div');
+ container.className = 'flex flex-wrap gap-2';
+
+ for (const [clientId, count] of Object.entries(clientIds)) {
+ const badge = createBadgeWithCount(clientId, count, color);
+ container.appendChild(badge);
+ }
+
+ return container;
+}
diff --git a/examples/pub-sub-message-annotations/javascript/src/components/details.ts b/examples/pub-sub-message-annotations/javascript/src/components/details.ts
new file mode 100644
index 0000000000..104987c9b3
--- /dev/null
+++ b/examples/pub-sub-message-annotations/javascript/src/components/details.ts
@@ -0,0 +1,126 @@
+// Details panel with publishing controls and tabbed annotations view
+import type { MessageWithSerial } from '../types';
+import { publishAnnotation } from '../ably';
+import { createAnnotationSummaryElement } from './summary';
+import { createAnnotationsListElement } from './annotations';
+
+export function createPublishAnnotationElement(message: MessageWithSerial) {
+ const publisher = document.createElement('div');
+ publisher.className = 'p-2 border-b border-gray-200 bg-gray-50';
+ publisher.innerHTML = `
+
+
+ total.v1
+ distinct.v1
+ unique.v1
+ multiple.v1
+ flag.v1
+
+
+ Publish
+
+ `;
+
+ const publishButton = publisher.querySelector('button');
+ publishButton?.addEventListener('click', (e) => {
+ e.preventDefault();
+ const selectInput = publisher.querySelector('select') as HTMLSelectElement;
+ const annotationType = selectInput.options[selectInput.selectedIndex].value;
+ const nameInput = publisher.querySelector('input') as HTMLInputElement;
+ const name = nameInput.value.trim();
+
+ if (name) {
+ // You might have multiple different usecases for annotations on the same message
+ // with the same aggregation type. A namespace lets you keep them separate, e.g.
+ // `read-receipt:flag.v1` and `delivery-receipt:flag.v1`. Here we just use "example"
+ // for everything since this example app only wants to use each aggregation type once.
+ publishAnnotation(message, {
+ type: `example:${annotationType}`,
+ name,
+ count: 1, // only used by the multiple.v1 aggregation type, but for simplicity just set it to 1 unconditionally
+ });
+ nameInput.value = '';
+ }
+ });
+
+ return publisher;
+}
+
+export function createMessageDetailsElement(message: MessageWithSerial) {
+ const messageDetails = document.createElement('div');
+ messageDetails.className = 'grid grid-cols-1';
+
+ const publishAnnotation = createPublishAnnotationElement(message);
+ messageDetails.appendChild(publishAnnotation);
+
+ const tabContainer = document.createElement('div');
+ tabContainer.className = 'overflow-hidden';
+
+ const tabList = document.createElement('ul');
+ tabList.className = 'uk-tab';
+ tabList.setAttribute('data-uk-tab', '');
+
+ const summaryTabItem = document.createElement('li');
+ summaryTabItem.className = 'uk-active';
+ const summaryLink = document.createElement('a');
+ summaryLink.href = '#';
+ summaryLink.textContent = 'Summary';
+ summaryTabItem.appendChild(summaryLink);
+
+ const rawTabItem = document.createElement('li');
+ const rawLink = document.createElement('a');
+ rawLink.href = '#';
+ rawLink.textContent = 'Raw Annotations';
+ rawTabItem.appendChild(rawLink);
+
+ tabList.appendChild(summaryTabItem);
+ tabList.appendChild(rawTabItem);
+
+ const tabContent = document.createElement('div');
+ tabContent.className = 'uk-switcher';
+
+ const summaryPanel = document.createElement('div');
+ summaryPanel.className = 'uk-active p-4';
+ summaryPanel.appendChild(createAnnotationSummaryElement(message));
+
+ const rawPanel = document.createElement('div');
+ rawPanel.className = 'p-4';
+ rawPanel.appendChild(createAnnotationsListElement(message.serial));
+
+ tabContent.appendChild(summaryPanel);
+ tabContent.appendChild(rawPanel);
+
+ tabContainer.appendChild(tabList);
+ tabContainer.appendChild(tabContent);
+
+ summaryLink.addEventListener('click', (e) => {
+ e.preventDefault();
+ summaryTabItem.className = 'uk-active';
+ rawTabItem.className = '';
+ summaryPanel.className = 'uk-active p-4';
+ rawPanel.className = 'p-4';
+ });
+
+ rawLink.addEventListener('click', (e) => {
+ e.preventDefault();
+ rawTabItem.className = 'uk-active';
+ summaryTabItem.className = '';
+ rawPanel.className = 'uk-active p-4';
+ summaryPanel.className = 'p-4';
+ });
+
+ messageDetails.appendChild(tabContainer);
+
+ return messageDetails;
+}
+
+export function createDetailsPane(message: MessageWithSerial) {
+ const detailsPane = document.createElement('div');
+ detailsPane.className = 'border-b border-l border-r border-gray-200 rounded-b-md overflow-hidden bg-white shadow-sm';
+ detailsPane.id = `details-${message.id}`;
+
+ const messageDetails = createMessageDetailsElement(message);
+ detailsPane.appendChild(messageDetails);
+
+ return detailsPane;
+}
diff --git a/examples/pub-sub-message-annotations/javascript/src/components/message.ts b/examples/pub-sub-message-annotations/javascript/src/components/message.ts
new file mode 100644
index 0000000000..cab5dd7af5
--- /dev/null
+++ b/examples/pub-sub-message-annotations/javascript/src/components/message.ts
@@ -0,0 +1,71 @@
+// Components for displaying messages received on the channel
+import type { MessageWithSerial } from '../types';
+import { createDropdownArrow, toggleArrowRotation } from './arrow';
+import { createDetailsPane } from './details';
+import { createBadge } from './badge';
+
+// Format timestamp for human-readable display
+function formatTimestamp(timestamp: number): string {
+ const date = new Date(timestamp);
+ return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' });
+}
+
+export function createMessageElement(message: MessageWithSerial) {
+ const messageContainer = document.createElement('div');
+ messageContainer.className = 'mb-4';
+ messageContainer.setAttribute('data-serial', message.serial);
+
+ // Main message element that can be clicked to expand
+ const messageElement = document.createElement('div');
+ messageElement.className = `px-3 py-2 border-t border-l border-r border-gray-200 rounded-t-md bg-white shadow-sm cursor-pointer`;
+ messageElement.id = `message-${message.id}`;
+
+ // First row: message text (left aligned) and dropdown arrow (right aligned)
+ const firstRow = document.createElement('div');
+ firstRow.className = 'flex justify-between items-center w-full';
+
+ const messageContent = document.createElement('div');
+ messageContent.className = 'flex-grow text-sm font-medium text-gray-700 overflow-hidden text-ellipsis';
+ messageContent.textContent = message.data;
+ firstRow.appendChild(messageContent);
+
+ // Add dropdown arrow
+ const arrow = createDropdownArrow('gray');
+ arrow.classList.add('ml-2', 'shrink-0');
+ firstRow.appendChild(arrow);
+
+ messageElement.appendChild(firstRow);
+
+ // Second row: client ID and timestamp (both right aligned)
+ const secondRow = document.createElement('div');
+ secondRow.className = 'flex justify-end items-center w-full mt-1 gap-2';
+
+ const clientBadge = createBadge(message.clientId || 'unknown', 'gray');
+ clientBadge.classList.add('shrink-0');
+
+ const timestamp = document.createElement('div');
+ timestamp.className = 'text-xs text-gray-500';
+ timestamp.textContent = formatTimestamp(message.timestamp || Date.now());
+
+ secondRow.appendChild(clientBadge);
+ secondRow.appendChild(timestamp);
+
+ messageElement.appendChild(secondRow);
+
+ // Create the expandable details pane
+ const detailsPane = createDetailsPane(message);
+ detailsPane.classList.add('hidden');
+
+ // Add click handler to toggle details
+ messageElement.addEventListener('click', (e) => {
+ e.preventDefault();
+ detailsPane.classList.toggle('hidden');
+ toggleArrowRotation(arrow);
+ });
+
+ // Add all elements to the container
+ messageContainer.appendChild(messageElement);
+ messageContainer.appendChild(detailsPane);
+
+ return messageContainer;
+}
diff --git a/examples/pub-sub-message-annotations/javascript/src/components/summary.ts b/examples/pub-sub-message-annotations/javascript/src/components/summary.ts
new file mode 100644
index 0000000000..00066e2cc8
--- /dev/null
+++ b/examples/pub-sub-message-annotations/javascript/src/components/summary.ts
@@ -0,0 +1,256 @@
+// Handles the display and management of message annotation summaries
+
+import * as Ably from 'ably';
+import type { MessageWithSerial } from '../types';
+import { findAnnotationType } from '../config';
+import { createDropdownArrow, rotateArrow, toggleArrowRotation } from './arrow';
+import {
+ createCountBadge,
+ createClientBadges,
+ createClientBadgesWithCounts,
+ createBadgeWithCount,
+} from './badge';
+import { getAnnotationTypeKey } from './annotations';
+
+function createEmptyAnnotationSummaryContentElement() {
+ const emptyState = document.createElement('div');
+ emptyState.className = 'text-center py-2 text-gray-500 text-sm';
+ emptyState.textContent = 'Publish an annotation to view summaries.';
+ return emptyState;
+}
+
+export function createAnnotationSummaryElement(message: MessageWithSerial) {
+ const annotationSummary = document.createElement('div');
+ annotationSummary.className = 'space-y-1';
+ annotationSummary.id = `sections-${message.serial}`;
+ annotationSummary.setAttribute('data-serial', message.serial);
+ annotationSummary.appendChild(createEmptyAnnotationSummaryContentElement());
+
+ return annotationSummary;
+}
+
+function createLabelContainer(label: string, color: string) {
+ const container = document.createElement('div');
+ container.className = 'flex items-center';
+
+ const labelSpan = document.createElement('span');
+ labelSpan.className = `text-sm font-medium text-${color}-800`;
+ labelSpan.textContent = label;
+
+ container.appendChild(labelSpan);
+ return container;
+}
+
+function createSectionHeader(key: string, entry: Ably.SummaryEntry) {
+ const typeKey = getAnnotationTypeKey(key);
+ const { color, label } = findAnnotationType(typeKey);
+ const sectionHeader = document.createElement('div');
+ sectionHeader.className = `border-l-4 border-l-${color}-500 border-t border-r border-gray-200 bg-white shadow-sm px-3 py-1.5 ${typeKey === 'total.v1' ? '' : 'cursor-pointer'}`;
+
+ const wrapper = document.createElement('div');
+ wrapper.className = 'flex justify-between items-center';
+
+ const labelContainer = createLabelContainer(label, color);
+
+ if (typeKey === 'total.v1') {
+ const total = (entry as Ably.SummaryTotal).total;
+ labelContainer.appendChild(createCountBadge(total, color));
+ wrapper.appendChild(labelContainer);
+ } else if (typeKey === 'flag.v1') {
+ const total = (entry as Ably.SummaryClientIdList).total;
+ labelContainer.appendChild(createCountBadge(total, color));
+ wrapper.appendChild(labelContainer);
+ wrapper.appendChild(createDropdownArrow('gray'));
+ } else {
+ const count = Object.keys(entry).length;
+ labelContainer.appendChild(createCountBadge(count, color));
+
+ const valueLabel = document.createElement('span');
+ valueLabel.className = `ml-1 text-xs text-gray-600`;
+ labelContainer.appendChild(valueLabel);
+
+ wrapper.appendChild(labelContainer);
+ wrapper.appendChild(createDropdownArrow('gray'));
+ }
+
+ sectionHeader.appendChild(wrapper);
+ return sectionHeader;
+}
+
+function createFlagCard(entry: Ably.SummaryClientIdList, color: string) {
+ const card = document.createElement('div');
+ card.className = 'p-3 bg-white flex items-center gap-2';
+
+ // Add empty spacer for alignment
+ const spacer = document.createElement('span');
+ spacer.className = 'flex-shrink-0 mr-auto';
+ card.appendChild(spacer);
+
+ // Add client badges
+ const badgesContainer = createClientBadges(entry.clientIds, 'gray');
+ badgesContainer.className = 'flex flex-wrap gap-1 items-center justify-end';
+ card.appendChild(badgesContainer);
+
+ // Add count badge
+ const countBadge = createCountBadge(entry.total, color);
+ countBadge.className = countBadge.className + ' ml-2 flex-shrink-0';
+ card.appendChild(countBadge);
+
+ return card;
+}
+
+function createDistinctUniqueCard(value: string, entry: Ably.SummaryClientIdList, color: string) {
+ const card = document.createElement('div');
+ card.className = 'p-3 bg-white flex items-center gap-2';
+
+ // Add value text
+ const valueContent = document.createElement('span');
+ valueContent.className = 'text-sm text-gray-700 flex-shrink-0 mr-auto';
+ valueContent.textContent = value;
+ card.appendChild(valueContent);
+
+ // Add client badges
+ const badgesContainer = createClientBadges(entry.clientIds, 'gray');
+ badgesContainer.className = 'flex flex-wrap gap-1 items-center justify-end';
+ card.appendChild(badgesContainer);
+
+ // Add count badge
+ const countBadge = createCountBadge(entry.total, color);
+ countBadge.className = countBadge.className + ' ml-2 flex-shrink-0';
+ card.appendChild(countBadge);
+
+ return card;
+}
+
+function createMultipleCard(value: string, entry: Ably.SummaryMultipleValues[string], color: string) {
+ const card = document.createElement('div');
+ card.className = 'p-3 bg-white flex items-center gap-2';
+
+ // Add value text
+ const valueContent = document.createElement('span');
+ valueContent.className = 'text-sm text-gray-700 flex-shrink-0 mr-auto';
+ valueContent.textContent = value;
+ card.appendChild(valueContent);
+
+ // Badge container for client badges
+ const badgeWrapper = document.createElement('div');
+ badgeWrapper.className = 'flex flex-wrap gap-1 items-center justify-end';
+
+ // Add client badges with counts and unidentified badge if needed
+ badgeWrapper.appendChild(createClientBadgesWithCounts(entry.clientIds || {}, 'gray'));
+ if (entry.totalUnidentified > 0) {
+ badgeWrapper.appendChild(createBadgeWithCount('Unidentified', entry.totalUnidentified, 'gray'));
+ }
+
+ card.appendChild(badgeWrapper);
+
+ // Add count badge
+ const countBadge = createCountBadge(entry.total, color);
+ countBadge.className = countBadge.className + ' ml-2 flex-shrink-0';
+ card.appendChild(countBadge);
+
+ return card;
+}
+
+function createSectionContent(fullTypeKey: string, entry: Ably.SummaryEntry) {
+ const typeKey = getAnnotationTypeKey(fullTypeKey);
+ const { color } = findAnnotationType(typeKey);
+ const sectionContent = document.createElement('div');
+ sectionContent.className = `overflow-hidden border-l-4 border-l-${color}-500 border-b border-r border-gray-200`;
+
+ if (typeKey === 'flag.v1') {
+ const card = createFlagCard(entry as Ably.SummaryClientIdList, color);
+ sectionContent.appendChild(card);
+ } else if (typeKey === 'distinct.v1' || typeKey === 'unique.v1') {
+ const entries = Object.entries(entry as Ably.SummaryUniqueValues | Ably.SummaryDistinctValues);
+ entries.forEach((entryData, index) => {
+ const [value, info] = entryData;
+ const card = createDistinctUniqueCard(value, info, color);
+ if (index < entries.length - 1) {
+ card.classList.add('border-b', 'border-gray-100');
+ }
+ sectionContent.appendChild(card);
+ });
+ } else if (typeKey === 'multiple.v1') {
+ const entries = Object.entries(entry as Ably.SummaryMultipleValues);
+ entries.forEach((entryData, index) => {
+ const [value, info] = entryData;
+ const card = createMultipleCard(value, info, color);
+ if (index < entries.length - 1) {
+ card.classList.add('border-b', 'border-gray-100');
+ }
+ sectionContent.appendChild(card);
+ });
+ }
+
+ return sectionContent;
+}
+
+export function createSection(key: string, entry: Ably.SummaryEntry, wasExpanded: boolean) {
+ const section = document.createElement('div');
+ section.setAttribute('data-type', key);
+
+ const sectionHeader = createSectionHeader(key, entry);
+ section.appendChild(sectionHeader);
+
+ const typeKey = getAnnotationTypeKey(key);
+ if (typeKey === 'total.v1') {
+ return section;
+ }
+
+ const sectionContent = createSectionContent(key, entry);
+ section.appendChild(sectionContent);
+
+ const shouldExpand = wasExpanded !== false;
+ section.setAttribute('data-expanded', `${shouldExpand}`);
+
+ if (!shouldExpand) {
+ sectionContent.classList.add('hidden');
+ }
+
+ const arrow = sectionHeader.querySelector('svg');
+ if (arrow instanceof SVGElement) {
+ rotateArrow(arrow, shouldExpand);
+ }
+
+ sectionHeader.addEventListener('click', (e) => {
+ e.preventDefault();
+ sectionContent.classList.toggle('hidden');
+
+ if (arrow instanceof SVGElement) {
+ const isExpanded = toggleArrowRotation(arrow);
+ section.setAttribute('data-expanded', `${isExpanded}`);
+ }
+ });
+
+ return section;
+}
+
+export function updateAnnotationSummary(message: MessageWithSerial) {
+ const sectionsContainer = document.getElementById(`sections-${message.serial}`);
+ if (!sectionsContainer) {
+ return;
+ }
+
+ // Preserve expansion states before rebuilding
+ const expandedStates: Record = {};
+ for (const section of sectionsContainer.querySelectorAll('[data-type]')) {
+ const type = section.getAttribute('data-type');
+ if (type) {
+ expandedStates[type] = section.getAttribute('data-expanded') === 'true';
+ }
+ }
+
+ sectionsContainer.innerHTML = '';
+ const summaryEntries = Object.entries(message.annotations?.summary || {});
+
+ if (summaryEntries.length === 0) {
+ sectionsContainer.appendChild(createEmptyAnnotationSummaryContentElement());
+ return;
+ }
+
+ for (const [key, entry] of summaryEntries) {
+ const section = createSection(key, entry, expandedStates[key]);
+ sectionsContainer.appendChild(section);
+ }
+}
diff --git a/examples/pub-sub-message-annotations/javascript/src/config.ts b/examples/pub-sub-message-annotations/javascript/src/config.ts
new file mode 100644
index 0000000000..7a4b64c73b
--- /dev/null
+++ b/examples/pub-sub-message-annotations/javascript/src/config.ts
@@ -0,0 +1,18 @@
+export const urlParams = new URLSearchParams(window.location.search);
+export const clientId = urlParams.get('clientId') || 'user1';
+// Remember to enable the "Annotations, updates, and deletes" channel rule for the channel
+// namespace you're using (the first colon-delimited segment, here, "annotation")
+export const channelName = urlParams.get('name') || `annotation:pub-sub-message-annotations`;
+
+export const annotationTypes = [
+ { key: 'total.v1', color: 'blue', label: 'Total' },
+ { key: 'distinct.v1', color: 'pink', label: 'Distinct' },
+ { key: 'unique.v1', color: 'purple', label: 'Unique' },
+ { key: 'multiple.v1', color: 'amber', label: 'Multiple' },
+ { key: 'flag.v1', color: 'cyan', label: 'Flag' },
+];
+
+// Looks up an annotation type by key, returning a fallback gray type if not found
+export function findAnnotationType(key: string) {
+ return annotationTypes.find((type) => type.key === key) || { key, color: 'gray', label: 'Unknown' };
+}
diff --git a/examples/pub-sub-message-annotations/javascript/src/script.ts b/examples/pub-sub-message-annotations/javascript/src/script.ts
new file mode 100644
index 0000000000..924db6e11c
--- /dev/null
+++ b/examples/pub-sub-message-annotations/javascript/src/script.ts
@@ -0,0 +1,48 @@
+import './styles.css';
+import 'franken-ui/js/core.iife';
+import 'franken-ui/js/icon.iife';
+import * as Ably from 'ably';
+import { getChannel } from './ably';
+import { hasSerial } from './types';
+import { createMessageElement } from './components/message';
+import { updateAnnotationSummary } from './components/summary';
+import { addAnnotation } from './components/annotations';
+
+async function main() {
+ // Publish regular messages that can be annotated.
+ const publishButton = document.getElementById('publish-button');
+ publishButton?.addEventListener('click', (e) => {
+ e.preventDefault();
+ const messageInput = document.getElementById('message-input') as HTMLInputElement;
+ const message = messageInput.value.trim();
+ if (message) {
+ getChannel().publish('message', message);
+ messageInput.value = '';
+ }
+ });
+
+ // Subscribe to messages.
+ // We will receive a message.summary event when an annotation is published
+ // and a new summary is available.
+ // Regular messages will be received as message.create events.
+ getChannel().subscribe((message) => {
+ if (!hasSerial(message)) {
+ console.error('Received message without serial (this indicates that you need to enable the "Annotations, updates, and deletes" feature in channel rules)');
+ return;
+ }
+ if (message.action === 'message.summary') {
+ updateAnnotationSummary(message);
+ } else if (message.action === 'message.create') {
+ const messageElement = createMessageElement(message);
+ document.getElementById('messages')?.appendChild(messageElement);
+ }
+ });
+
+ // Subscribe to individual annotations (both annotation.create and annotation.delete events)
+ // and display them in the raw annotations view
+ getChannel().annotations.subscribe((annotation: Ably.Annotation) => {
+ addAnnotation(annotation);
+ });
+}
+
+main().catch(console.error);
diff --git a/examples/pub-sub-message-annotations/javascript/src/styles.css b/examples/pub-sub-message-annotations/javascript/src/styles.css
new file mode 100644
index 0000000000..562e9ac776
--- /dev/null
+++ b/examples/pub-sub-message-annotations/javascript/src/styles.css
@@ -0,0 +1,108 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+@layer base {
+ :root {
+ --background: 0 0% 100%;
+ --foreground: 20 14.3% 4.1%;
+ --card: 0 0% 100%;
+ --card-foreground: 20 14.3% 4.1%;
+ --popover: 0 0% 100%;
+ --popover-foreground: 20 14.3% 4.1%;
+ --primary: 220 13% 33%;
+ --primary-foreground: 60 9.1% 97.8%;
+ --secondary: 209 100% 43%;
+ --secondary-foreground: 60 9.1% 97.8%;
+ --muted: 60 4.8% 95.9%;
+ --muted-foreground: 25 5.3% 44.7%;
+ --accent: 60 4.8% 95.9%;
+ --accent-foreground: 24 9.8% 10%;
+ --destructive: 0 84.2% 60.2%;
+ --destructive-foreground: 60 9.1% 97.8%;
+ --border: 20 5.9% 90%;
+ --input: 20 5.9% 90%;
+ --ring: 24.6 95% 53.1%;
+ --radius: 0.5rem;
+ --chart-1: 12 76% 61%;
+ --chart-2: 173 58% 39%;
+ --chart-3: 197 37% 24%;
+ --chart-4: 43 74% 66%;
+ --chart-5: 27 87% 67%;
+ }
+
+ .dark {
+ --background: 20 14.3% 4.1%;
+ --foreground: 60 9.1% 97.8%;
+ --card: 20 14.3% 4.1%;
+ --card-foreground: 60 9.1% 97.8%;
+ --popover: 20 14.3% 4.1%;
+ --popover-foreground: 60 9.1% 97.8%;
+ --primary: 220 13% 33%;
+ --primary-foreground: 60 9.1% 97.8%;
+ --secondary: 209 100% 43%;
+ --secondary-foreground: 60 9.1% 97.8%;
+ --muted: 12 6.5% 15.1%;
+ --muted-foreground: 24 5.4% 63.9%;
+ --accent: 12 6.5% 15.1%;
+ --accent-foreground: 60 9.1% 97.8%;
+ --destructive: 0 72.2% 50.6%;
+ --destructive-foreground: 60 9.1% 97.8%;
+ --border: 12 6.5% 15.1%;
+ --input: 12 6.5% 15.1%;
+ --ring: 20.5 90.2% 48.2%;
+ --chart-1: 220 70% 50%;
+ --chart-2: 160 60% 45%;
+ --chart-3: 30 80% 55%;
+ --chart-4: 280 65% 60%;
+ --chart-5: 340 75% 55%;
+ }
+}
+
+.container {
+ width: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ position: relative;
+ background-color: #f4f8fb;
+ height: 100vh;
+}
+
+.inner {
+ width: 100%;
+ max-width: 320px;
+ padding: 1rem 0.5rem;
+}
+
+/* InputCell */
+.input-cell-container {
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ margin-bottom: 1rem;
+}
+
+.input-cell-container:last-child {
+ display: none;
+}
+
+@media (min-height: 400px) {
+ .input-cell-container:last-child {
+ display: flex;
+ }
+}
+
+input {
+ padding: 0.5rem;
+ width: 100%;
+ height: 2.5rem;
+ font-size: 0.875rem;
+ border-radius: 0.375rem;
+ outline: none;
+ transition: all 0.2s ease-in-out;
+}
+
+.uk-text-primary {
+ color: hsl(var(--primary));
+}
diff --git a/examples/pub-sub-message-annotations/javascript/src/types.ts b/examples/pub-sub-message-annotations/javascript/src/types.ts
new file mode 100644
index 0000000000..97e0b551bd
--- /dev/null
+++ b/examples/pub-sub-message-annotations/javascript/src/types.ts
@@ -0,0 +1,13 @@
+import * as Ably from 'ably';
+
+export type AnnotationType = {
+ key: string;
+ color: string;
+ label: string;
+};
+
+export type MessageWithSerial = Ably.InboundMessage & { serial: string };
+
+export function hasSerial(message: Ably.InboundMessage): message is MessageWithSerial {
+ return typeof message.serial === 'string';
+}
diff --git a/examples/pub-sub-message-annotations/javascript/tailwind.config.ts b/examples/pub-sub-message-annotations/javascript/tailwind.config.ts
new file mode 100644
index 0000000000..f6763bb1bb
--- /dev/null
+++ b/examples/pub-sub-message-annotations/javascript/tailwind.config.ts
@@ -0,0 +1,18 @@
+import baseConfig from '../../tailwind.config';
+import type { Config } from 'tailwindcss';
+
+const config: Config = {
+ ...baseConfig,
+ content: ['./src/**/*.{js,ts,tsx}', './index.html'],
+ safelist: [
+ // allow dynamic classes for colors
+ {
+ pattern: /(bg|text|border)-(blue|cyan|green|purple|pink|amber|red|gray)-(50|100|200|300|400|500|600|700|800|900)/,
+ },
+ {
+ pattern: /border-(l|t|r|b)-(blue|cyan|green|purple|pink|amber|red|gray)-(50|100|200|300|400|500|600|700|800|900)/,
+ },
+ ],
+};
+
+export default config;
diff --git a/examples/pub-sub-message-annotations/javascript/tsconfig.json b/examples/pub-sub-message-annotations/javascript/tsconfig.json
new file mode 100644
index 0000000000..91c07db93c
--- /dev/null
+++ b/examples/pub-sub-message-annotations/javascript/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../../tsconfig.json",
+ "include": ["./src/**/*.ts", "./src/**/*.tsx"],
+ "exclude": ["../../node_modules", "../../dist", "../../lib"],
+ "compilerOptions": {
+ "types": ["vite/client"]
+ }
+}
diff --git a/examples/pub-sub-message-annotations/javascript/vite-env.d.ts b/examples/pub-sub-message-annotations/javascript/vite-env.d.ts
new file mode 100644
index 0000000000..449e61aa75
--- /dev/null
+++ b/examples/pub-sub-message-annotations/javascript/vite-env.d.ts
@@ -0,0 +1,8 @@
+interface ImportMetaEnv {
+ readonly VITE_ABLY_KEY: string;
+ // Add other environment variables here if needed
+}
+
+interface ImportMeta {
+ readonly env: ImportMetaEnv;
+}
diff --git a/examples/pub-sub-message-annotations/javascript/vite.config.ts b/examples/pub-sub-message-annotations/javascript/vite.config.ts
new file mode 100644
index 0000000000..3b1cf13b4f
--- /dev/null
+++ b/examples/pub-sub-message-annotations/javascript/vite.config.ts
@@ -0,0 +1,7 @@
+import { defineConfig } from 'vite';
+import baseConfig from '../../vite.config';
+
+export default defineConfig({
+ ...baseConfig,
+ envDir: '../../',
+});
diff --git a/examples/yarn.lock b/examples/yarn.lock
index fba2f5486a..5d0ca53fc7 100644
--- a/examples/yarn.lock
+++ b/examples/yarn.lock
@@ -10,9 +10,9 @@
clsx "^2.1.1"
"@ably/chat@^0.14.0":
- version "0.14.0"
- resolved "https://registry.yarnpkg.com/@ably/chat/-/chat-0.14.0.tgz#8a7d7be46301977bd2cbd01021f67be8980d0370"
- integrity sha512-9QsJdHVcyYDP0cTHXh7towHI9tM+SbmEMMVK10+0y1N1epl6FBSEeBDMn1fH5i73nxbKleUxjBltWiXlQz4InA==
+ version "0.14.1"
+ resolved "https://registry.yarnpkg.com/@ably/chat/-/chat-0.14.1.tgz#a547e84d5ebb05b8a64765d264a3440cfc2d8ad7"
+ integrity sha512-hCKTpHMePvJ98vYB/PM/PEa49iP3SYsgJ8KhbVEI/LP+nuWN2BaZui0YPfnLkWXh5eQf1Fb0d5sPhY7/x2kOww==
dependencies:
async-mutex "^0.5.0"
dequal "^2.0.3"
@@ -22,9 +22,9 @@
"@rollup/rollup-linux-x64-gnu" "^4.18"
"@ably/msgpack-js@^0.4.0":
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/@ably/msgpack-js/-/msgpack-js-0.4.0.tgz#aaaf5d8dffacf7aa253effd8c3488aa09130e6a2"
- integrity sha512-IPt/BoiQwCWubqoNik1aw/6M/DleMdrxJOUpSja6xmMRbT2p1TA8oqKWgfZabqzrq8emRNeSl/+4XABPNnW5pQ==
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/@ably/msgpack-js/-/msgpack-js-0.4.1.tgz#81526bdea5362ca57c112356899a5e506a34b760"
+ integrity sha512-Sjxj6SOr17hExAVrsycN7u6oV4PhZcK7Z2S8dM71CH/butgO47cSo/TL6FJPCXUyDAzKkOWjMUpJGyZkEpyu4Q==
dependencies:
bops "^1.0.1"
@@ -40,166 +40,185 @@
resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30"
integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==
-"@ampproject/remapping@^2.2.0":
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4"
- integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
+"@babel/code-frame@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be"
+ integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==
dependencies:
- "@jridgewell/gen-mapping" "^0.3.5"
- "@jridgewell/trace-mapping" "^0.3.24"
-
-"@babel/code-frame@^7.26.2":
- version "7.26.2"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85"
- integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==
- dependencies:
- "@babel/helper-validator-identifier" "^7.25.9"
+ "@babel/helper-validator-identifier" "^7.27.1"
js-tokens "^4.0.0"
- picocolors "^1.0.0"
+ picocolors "^1.1.1"
-"@babel/compat-data@^7.26.8":
- version "7.26.8"
- resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367"
- integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==
+"@babel/compat-data@^7.27.2":
+ version "7.28.4"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.4.tgz#96fdf1af1b8859c8474ab39c295312bfb7c24b04"
+ integrity sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==
"@babel/core@^7.20.12":
- version "7.26.10"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.10.tgz#5c876f83c8c4dcb233ee4b670c0606f2ac3000f9"
- integrity sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==
- dependencies:
- "@ampproject/remapping" "^2.2.0"
- "@babel/code-frame" "^7.26.2"
- "@babel/generator" "^7.26.10"
- "@babel/helper-compilation-targets" "^7.26.5"
- "@babel/helper-module-transforms" "^7.26.0"
- "@babel/helpers" "^7.26.10"
- "@babel/parser" "^7.26.10"
- "@babel/template" "^7.26.9"
- "@babel/traverse" "^7.26.10"
- "@babel/types" "^7.26.10"
+ version "7.28.4"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.4.tgz#12a550b8794452df4c8b084f95003bce1742d496"
+ integrity sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==
+ dependencies:
+ "@babel/code-frame" "^7.27.1"
+ "@babel/generator" "^7.28.3"
+ "@babel/helper-compilation-targets" "^7.27.2"
+ "@babel/helper-module-transforms" "^7.28.3"
+ "@babel/helpers" "^7.28.4"
+ "@babel/parser" "^7.28.4"
+ "@babel/template" "^7.27.2"
+ "@babel/traverse" "^7.28.4"
+ "@babel/types" "^7.28.4"
+ "@jridgewell/remapping" "^2.3.5"
convert-source-map "^2.0.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
json5 "^2.2.3"
semver "^6.3.1"
-"@babel/generator@^7.26.10", "@babel/generator@^7.27.0":
- version "7.27.0"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.0.tgz#764382b5392e5b9aff93cadb190d0745866cbc2c"
- integrity sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==
+"@babel/generator@^7.28.3":
+ version "7.28.3"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.3.tgz#9626c1741c650cbac39121694a0f2d7451b8ef3e"
+ integrity sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==
dependencies:
- "@babel/parser" "^7.27.0"
- "@babel/types" "^7.27.0"
- "@jridgewell/gen-mapping" "^0.3.5"
- "@jridgewell/trace-mapping" "^0.3.25"
+ "@babel/parser" "^7.28.3"
+ "@babel/types" "^7.28.2"
+ "@jridgewell/gen-mapping" "^0.3.12"
+ "@jridgewell/trace-mapping" "^0.3.28"
jsesc "^3.0.2"
-"@babel/helper-compilation-targets@^7.26.5":
- version "7.27.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz#de0c753b1cd1d9ab55d473c5a5cf7170f0a81880"
- integrity sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==
+"@babel/helper-compilation-targets@^7.27.2":
+ version "7.27.2"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d"
+ integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==
dependencies:
- "@babel/compat-data" "^7.26.8"
- "@babel/helper-validator-option" "^7.25.9"
+ "@babel/compat-data" "^7.27.2"
+ "@babel/helper-validator-option" "^7.27.1"
browserslist "^4.24.0"
lru-cache "^5.1.1"
semver "^6.3.1"
-"@babel/helper-module-imports@^7.25.9":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715"
- integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==
+"@babel/helper-globals@^7.28.0":
+ version "7.28.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674"
+ integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==
+
+"@babel/helper-module-imports@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204"
+ integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==
dependencies:
- "@babel/traverse" "^7.25.9"
- "@babel/types" "^7.25.9"
+ "@babel/traverse" "^7.27.1"
+ "@babel/types" "^7.27.1"
-"@babel/helper-module-transforms@^7.26.0":
- version "7.26.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae"
- integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==
+"@babel/helper-module-transforms@^7.28.3":
+ version "7.28.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz#a2b37d3da3b2344fe085dab234426f2b9a2fa5f6"
+ integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==
dependencies:
- "@babel/helper-module-imports" "^7.25.9"
- "@babel/helper-validator-identifier" "^7.25.9"
- "@babel/traverse" "^7.25.9"
+ "@babel/helper-module-imports" "^7.27.1"
+ "@babel/helper-validator-identifier" "^7.27.1"
+ "@babel/traverse" "^7.28.3"
-"@babel/helper-plugin-utils@^7.25.9":
- version "7.26.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35"
- integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==
+"@babel/helper-plugin-utils@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c"
+ integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==
-"@babel/helper-string-parser@^7.25.9":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c"
- integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==
+"@babel/helper-string-parser@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687"
+ integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==
-"@babel/helper-validator-identifier@^7.25.9":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7"
- integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==
+"@babel/helper-validator-identifier@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8"
+ integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==
-"@babel/helper-validator-option@^7.25.9":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72"
- integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==
+"@babel/helper-validator-option@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f"
+ integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==
-"@babel/helpers@^7.26.10":
- version "7.27.0"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.0.tgz#53d156098defa8243eab0f32fa17589075a1b808"
- integrity sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==
+"@babel/helpers@^7.28.4":
+ version "7.28.4"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.4.tgz#fe07274742e95bdf7cf1443593eeb8926ab63827"
+ integrity sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==
dependencies:
- "@babel/template" "^7.27.0"
- "@babel/types" "^7.27.0"
+ "@babel/template" "^7.27.2"
+ "@babel/types" "^7.28.4"
-"@babel/parser@^7.26.10", "@babel/parser@^7.27.0":
- version "7.27.0"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.0.tgz#3d7d6ee268e41d2600091cbd4e145ffee85a44ec"
- integrity sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==
+"@babel/parser@^7.27.2", "@babel/parser@^7.28.3", "@babel/parser@^7.28.4":
+ version "7.28.4"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.4.tgz#da25d4643532890932cc03f7705fe19637e03fa8"
+ integrity sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==
dependencies:
- "@babel/types" "^7.27.0"
+ "@babel/types" "^7.28.4"
"@babel/plugin-transform-react-jsx-self@^7.18.6":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz#c0b6cae9c1b73967f7f9eb2fca9536ba2fad2858"
- integrity sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz#af678d8506acf52c577cac73ff7fe6615c85fc92"
+ integrity sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/helper-plugin-utils" "^7.27.1"
"@babel/plugin-transform-react-jsx-source@^7.19.6":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz#4c6b8daa520b5f155b5fb55547d7c9fa91417503"
- integrity sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==
- dependencies:
- "@babel/helper-plugin-utils" "^7.25.9"
-
-"@babel/template@^7.26.9", "@babel/template@^7.27.0":
- version "7.27.0"
- resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.0.tgz#b253e5406cc1df1c57dcd18f11760c2dbf40c0b4"
- integrity sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==
- dependencies:
- "@babel/code-frame" "^7.26.2"
- "@babel/parser" "^7.27.0"
- "@babel/types" "^7.27.0"
-
-"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.10":
- version "7.27.0"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.0.tgz#11d7e644779e166c0442f9a07274d02cd91d4a70"
- integrity sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==
- dependencies:
- "@babel/code-frame" "^7.26.2"
- "@babel/generator" "^7.27.0"
- "@babel/parser" "^7.27.0"
- "@babel/template" "^7.27.0"
- "@babel/types" "^7.27.0"
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz#dcfe2c24094bb757bf73960374e7c55e434f19f0"
+ integrity sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/template@^7.27.2":
+ version "7.27.2"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d"
+ integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==
+ dependencies:
+ "@babel/code-frame" "^7.27.1"
+ "@babel/parser" "^7.27.2"
+ "@babel/types" "^7.27.1"
+
+"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4":
+ version "7.28.4"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.4.tgz#8d456101b96ab175d487249f60680221692b958b"
+ integrity sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==
+ dependencies:
+ "@babel/code-frame" "^7.27.1"
+ "@babel/generator" "^7.28.3"
+ "@babel/helper-globals" "^7.28.0"
+ "@babel/parser" "^7.28.4"
+ "@babel/template" "^7.27.2"
+ "@babel/types" "^7.28.4"
debug "^4.3.1"
- globals "^11.1.0"
-"@babel/types@^7.25.9", "@babel/types@^7.26.10", "@babel/types@^7.27.0":
- version "7.27.0"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.0.tgz#ef9acb6b06c3173f6632d993ecb6d4ae470b4559"
- integrity sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==
+"@babel/types@^7.27.1", "@babel/types@^7.28.2", "@babel/types@^7.28.4":
+ version "7.28.4"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.4.tgz#0a4e618f4c60a7cd6c11cb2d48060e4dbe38ac3a"
+ integrity sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==
+ dependencies:
+ "@babel/helper-string-parser" "^7.27.1"
+ "@babel/helper-validator-identifier" "^7.27.1"
+
+"@emnapi/core@^1.5.0":
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.5.0.tgz#85cd84537ec989cebb2343606a1ee663ce4edaf0"
+ integrity sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==
+ dependencies:
+ "@emnapi/wasi-threads" "1.1.0"
+ tslib "^2.4.0"
+
+"@emnapi/runtime@^1.5.0":
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.5.0.tgz#9aebfcb9b17195dce3ab53c86787a6b7d058db73"
+ integrity sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==
dependencies:
- "@babel/helper-string-parser" "^7.25.9"
- "@babel/helper-validator-identifier" "^7.25.9"
+ tslib "^2.4.0"
+
+"@emnapi/wasi-threads@1.1.0", "@emnapi/wasi-threads@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz#60b2102fddc9ccb78607e4a3cf8403ea69be41bf"
+ integrity sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==
+ dependencies:
+ tslib "^2.4.0"
"@esbuild/android-arm64@0.18.20":
version "0.18.20"
@@ -312,9 +331,9 @@
integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==
"@eslint-community/eslint-utils@^4.2.0":
- version "4.5.1"
- resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz#b0fc7e06d0c94f801537fd4237edc2706d3b8e4c"
- integrity sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==
+ version "4.9.0"
+ resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz#7308df158e064f0dd8b8fdb58aa14fa2a7f913b3"
+ integrity sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==
dependencies:
eslint-visitor-keys "^3.4.3"
@@ -374,13 +393,27 @@
wrap-ansi "^8.1.0"
wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
-"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5":
- version "0.3.8"
- resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142"
- integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==
+"@isaacs/fs-minipass@^4.0.0":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32"
+ integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==
+ dependencies:
+ minipass "^7.0.4"
+
+"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5":
+ version "0.3.13"
+ resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f"
+ integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==
dependencies:
- "@jridgewell/set-array" "^1.2.1"
- "@jridgewell/sourcemap-codec" "^1.4.10"
+ "@jridgewell/sourcemap-codec" "^1.5.0"
+ "@jridgewell/trace-mapping" "^0.3.24"
+
+"@jridgewell/remapping@^2.3.4", "@jridgewell/remapping@^2.3.5":
+ version "2.3.5"
+ resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1"
+ integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.3.5"
"@jridgewell/trace-mapping" "^0.3.24"
"@jridgewell/resolve-uri@^3.1.0":
@@ -388,24 +421,28 @@
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
-"@jridgewell/set-array@^1.2.1":
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
- integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
+"@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0", "@jridgewell/sourcemap-codec@^1.5.5":
+ version "1.5.5"
+ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba"
+ integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==
-"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14":
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
- integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
-
-"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
- version "0.3.25"
- resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
- integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
+"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.28":
+ version "0.3.31"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0"
+ integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==
dependencies:
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
+"@napi-rs/wasm-runtime@^1.0.5":
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.6.tgz#ba6cf875b7bf96052d0de29a91b029c94c6e9a48"
+ integrity sha512-DXj75ewm11LIWUk198QSKUTxjyRjsBwk09MuMk5DGK+GDUtyPhhEHOGP/Xwwj3DjQXXkivoBirmOnKrLfc0+9g==
+ dependencies:
+ "@emnapi/core" "^1.5.0"
+ "@emnapi/runtime" "^1.5.0"
+ "@tybys/wasm-util" "^0.10.1"
+
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
@@ -438,14 +475,14 @@
integrity sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==
"@rollup/rollup-darwin-arm64@^4.18":
- version "4.39.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.39.0.tgz#830d07794d6a407c12b484b8cf71affd4d3800a6"
- integrity sha512-lXQnhpFDOKDXiGxsU9/l8UEGGM65comrQuZ+lDcGUx+9YQ9dKpF3rSEGepyeR5AHZ0b5RgiligsBhWZfSSQh8Q==
+ version "4.52.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.4.tgz#4ee37078bccd725ae3c5f30ef92efc8e1bf886f3"
+ integrity sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==
"@rollup/rollup-linux-x64-gnu@^4.18":
- version "4.39.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.39.0.tgz#00825b3458094d5c27cb4ed66e88bfe9f1e65f90"
- integrity sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA==
+ version "4.52.4"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.4.tgz#aa9d5b307c08f05d3454225bb0a2b4cc87eeb2e1"
+ integrity sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==
"@sindresorhus/is@^4.0.0":
version "4.6.0"
@@ -459,103 +496,129 @@
dependencies:
defer-to-connect "^2.0.0"
-"@tailwindcss/node@4.1.3":
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/@tailwindcss/node/-/node-4.1.3.tgz#f290886582ce8eb1978853d07ca4da45f2d43fdb"
- integrity sha512-H/6r6IPFJkCfBJZ2dKZiPJ7Ueb2wbL592+9bQEl2r73qbX6yGnmQVIfiUvDRB2YI0a3PWDrzUwkvQx1XW1bNkA==
- dependencies:
- enhanced-resolve "^5.18.1"
- jiti "^2.4.2"
- lightningcss "1.29.2"
- tailwindcss "4.1.3"
-
-"@tailwindcss/oxide-android-arm64@4.1.3":
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.3.tgz#6c1834e7de84aa5544f4c8aacb380e00e019a11f"
- integrity sha512-cxklKjtNLwFl3mDYw4XpEfBY+G8ssSg9ADL4Wm6//5woi3XGqlxFsnV5Zb6v07dxw1NvEX2uoqsxO/zWQsgR+g==
-
-"@tailwindcss/oxide-darwin-arm64@4.1.3":
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.3.tgz#ed3abd4a59f05a1ac58337b63d6fe82bb9903462"
- integrity sha512-mqkf2tLR5VCrjBvuRDwzKNShRu99gCAVMkVsaEOFvv6cCjlEKXRecPu9DEnxp6STk5z+Vlbh1M5zY3nQCXMXhw==
-
-"@tailwindcss/oxide-darwin-x64@4.1.3":
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.3.tgz#d8a0786f4eae8203f8345fcf5b03f3284eee82af"
- integrity sha512-7sGraGaWzXvCLyxrc7d+CCpUN3fYnkkcso3rCzwUmo/LteAl2ZGCDlGvDD8Y/1D3ngxT8KgDj1DSwOnNewKhmg==
-
-"@tailwindcss/oxide-freebsd-x64@4.1.3":
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.3.tgz#e76520e5341c3a44959901b8fefee78d4fc2f074"
- integrity sha512-E2+PbcbzIReaAYZe997wb9rId246yDkCwAakllAWSGqe6VTg9hHle67hfH6ExjpV2LSK/siRzBUs5wVff3RW9w==
-
-"@tailwindcss/oxide-linux-arm-gnueabihf@4.1.3":
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.3.tgz#130c276e590b6ba621c443ac7faa702a709620c7"
- integrity sha512-GvfbJ8wjSSjbLFFE3UYz4Eh8i4L6GiEYqCtA8j2Zd2oXriPuom/Ah/64pg/szWycQpzRnbDiJozoxFU2oJZyfg==
-
-"@tailwindcss/oxide-linux-arm64-gnu@4.1.3":
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.3.tgz#55e736a89d8547835026df3c5d6ce50467d71241"
- integrity sha512-35UkuCWQTeG9BHcBQXndDOrpsnt3Pj9NVIB4CgNiKmpG8GnCNXeMczkUpOoqcOhO6Cc/mM2W7kaQ/MTEENDDXg==
-
-"@tailwindcss/oxide-linux-arm64-musl@4.1.3":
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.3.tgz#4ff54e4a40fede7a66e209b07f9b5da432d96678"
- integrity sha512-dm18aQiML5QCj9DQo7wMbt1Z2tl3Giht54uVR87a84X8qRtuXxUqnKQkRDK5B4bCOmcZ580lF9YcoMkbDYTXHQ==
-
-"@tailwindcss/oxide-linux-x64-gnu@4.1.3":
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.3.tgz#66477a71fbaad552be882e8b7a56bb7519b47838"
- integrity sha512-LMdTmGe/NPtGOaOfV2HuO7w07jI3cflPrVq5CXl+2O93DCewADK0uW1ORNAcfu2YxDUS035eY2W38TxrsqngxA==
-
-"@tailwindcss/oxide-linux-x64-musl@4.1.3":
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.3.tgz#403145ce43361e7d63886c878fdb09cd868920da"
- integrity sha512-aalNWwIi54bbFEizwl1/XpmdDrOaCjRFQRgtbv9slWjmNPuJJTIKPHf5/XXDARc9CneW9FkSTqTbyvNecYAEGw==
-
-"@tailwindcss/oxide-win32-arm64-msvc@4.1.3":
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.3.tgz#0cc2bc59c228ce1d64156089af21acc4302081da"
- integrity sha512-PEj7XR4OGTGoboTIAdXicKuWl4EQIjKHKuR+bFy9oYN7CFZo0eu74+70O4XuERX4yjqVZGAkCdglBODlgqcCXg==
-
-"@tailwindcss/oxide-win32-x64-msvc@4.1.3":
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.3.tgz#9bd5108b95b03dace8a2e5e738b1b2389f8a6d09"
- integrity sha512-T8gfxECWDBENotpw3HR9SmNiHC9AOJdxs+woasRZ8Q/J4VHN0OMs7F+4yVNZ9EVN26Wv6mZbK0jv7eHYuLJLwA==
-
-"@tailwindcss/oxide@4.1.3":
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/@tailwindcss/oxide/-/oxide-4.1.3.tgz#d01162137fcefe7d4c2a34500b9ed5c142388352"
- integrity sha512-t16lpHCU7LBxDe/8dCj9ntyNpXaSTAgxWm1u2XQP5NiIu4KGSyrDJJRlK9hJ4U9yJxx0UKCVI67MJWFNll5mOQ==
+"@tailwindcss/node@4.1.14":
+ version "4.1.14"
+ resolved "https://registry.yarnpkg.com/@tailwindcss/node/-/node-4.1.14.tgz#cf3864490c746db6b06b46aa235df9021a289bad"
+ integrity sha512-hpz+8vFk3Ic2xssIA3e01R6jkmsAhvkQdXlEbRTk6S10xDAtiQiM3FyvZVGsucefq764euO/b8WUW9ysLdThHw==
+ dependencies:
+ "@jridgewell/remapping" "^2.3.4"
+ enhanced-resolve "^5.18.3"
+ jiti "^2.6.0"
+ lightningcss "1.30.1"
+ magic-string "^0.30.19"
+ source-map-js "^1.2.1"
+ tailwindcss "4.1.14"
+
+"@tailwindcss/oxide-android-arm64@4.1.14":
+ version "4.1.14"
+ resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.14.tgz#8903678d75715d913b8f7c5f6fa0517af83b5111"
+ integrity sha512-a94ifZrGwMvbdeAxWoSuGcIl6/DOP5cdxagid7xJv6bwFp3oebp7y2ImYsnZBMTwjn5Ev5xESvS3FFYUGgPODQ==
+
+"@tailwindcss/oxide-darwin-arm64@4.1.14":
+ version "4.1.14"
+ resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.14.tgz#72d56afadce829047a83d8512f29ee16cf6fbea5"
+ integrity sha512-HkFP/CqfSh09xCnrPJA7jud7hij5ahKyWomrC3oiO2U9i0UjP17o9pJbxUN0IJ471GTQQmzwhp0DEcpbp4MZTA==
+
+"@tailwindcss/oxide-darwin-x64@4.1.14":
+ version "4.1.14"
+ resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.14.tgz#ac1af82da01299143129fdf615f6fcc046b4094e"
+ integrity sha512-eVNaWmCgdLf5iv6Qd3s7JI5SEFBFRtfm6W0mphJYXgvnDEAZ5sZzqmI06bK6xo0IErDHdTA5/t7d4eTfWbWOFw==
+
+"@tailwindcss/oxide-freebsd-x64@4.1.14":
+ version "4.1.14"
+ resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.14.tgz#a955cedf9b020147d222f92490e9d331db9b5c36"
+ integrity sha512-QWLoRXNikEuqtNb0dhQN6wsSVVjX6dmUFzuuiL09ZeXju25dsei2uIPl71y2Ic6QbNBsB4scwBoFnlBfabHkEw==
+
+"@tailwindcss/oxide-linux-arm-gnueabihf@4.1.14":
+ version "4.1.14"
+ resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.14.tgz#5474bee4d377144107f3f0198a3c0225a46c02e6"
+ integrity sha512-VB4gjQni9+F0VCASU+L8zSIyjrLLsy03sjcR3bM0V2g4SNamo0FakZFKyUQ96ZVwGK4CaJsc9zd/obQy74o0Fw==
+
+"@tailwindcss/oxide-linux-arm64-gnu@4.1.14":
+ version "4.1.14"
+ resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.14.tgz#b06ca140083b353735414e32f7a8786f55ce2dd6"
+ integrity sha512-qaEy0dIZ6d9vyLnmeg24yzA8XuEAD9WjpM5nIM1sUgQ/Zv7cVkharPDQcmm/t/TvXoKo/0knI3me3AGfdx6w1w==
+
+"@tailwindcss/oxide-linux-arm64-musl@4.1.14":
+ version "4.1.14"
+ resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.14.tgz#85f4cabea2a07609274d1f747bd098c5da2a7cd2"
+ integrity sha512-ISZjT44s59O8xKsPEIesiIydMG/sCXoMBCqsphDm/WcbnuWLxxb+GcvSIIA5NjUw6F8Tex7s5/LM2yDy8RqYBQ==
+
+"@tailwindcss/oxide-linux-x64-gnu@4.1.14":
+ version "4.1.14"
+ resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.14.tgz#0d7fbf91763a2f6886044a050298489107d120bd"
+ integrity sha512-02c6JhLPJj10L2caH4U0zF8Hji4dOeahmuMl23stk0MU1wfd1OraE7rOloidSF8W5JTHkFdVo/O7uRUJJnUAJg==
+
+"@tailwindcss/oxide-linux-x64-musl@4.1.14":
+ version "4.1.14"
+ resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.14.tgz#93578713064ba4c16df517df01b3c546ecc9878d"
+ integrity sha512-TNGeLiN1XS66kQhxHG/7wMeQDOoL0S33x9BgmydbrWAb9Qw0KYdd8o1ifx4HOGDWhVmJ+Ul+JQ7lyknQFilO3Q==
+
+"@tailwindcss/oxide-wasm32-wasi@4.1.14":
+ version "4.1.14"
+ resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.14.tgz#9e55999129a952a3dcc2196cc9cc55248cc1b1fe"
+ integrity sha512-uZYAsaW/jS/IYkd6EWPJKW/NlPNSkWkBlaeVBi/WsFQNP05/bzkebUL8FH1pdsqx4f2fH/bWFcUABOM9nfiJkQ==
+ dependencies:
+ "@emnapi/core" "^1.5.0"
+ "@emnapi/runtime" "^1.5.0"
+ "@emnapi/wasi-threads" "^1.1.0"
+ "@napi-rs/wasm-runtime" "^1.0.5"
+ "@tybys/wasm-util" "^0.10.1"
+ tslib "^2.4.0"
+
+"@tailwindcss/oxide-win32-arm64-msvc@4.1.14":
+ version "4.1.14"
+ resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.14.tgz#097c00bfc60cd84943a9cb5e853b25fa25525c77"
+ integrity sha512-Az0RnnkcvRqsuoLH2Z4n3JfAef0wElgzHD5Aky/e+0tBUxUhIeIqFBTMNQvmMRSP15fWwmvjBxZ3Q8RhsDnxAA==
+
+"@tailwindcss/oxide-win32-x64-msvc@4.1.14":
+ version "4.1.14"
+ resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.14.tgz#eaa49fa930ce16b23478d3b58c079a40ac0b6622"
+ integrity sha512-ttblVGHgf68kEE4om1n/n44I0yGPkCPbLsqzjvybhpwa6mKKtgFfAzy6btc3HRmuW7nHe0OOrSeNP9sQmmH9XA==
+
+"@tailwindcss/oxide@4.1.14":
+ version "4.1.14"
+ resolved "https://registry.yarnpkg.com/@tailwindcss/oxide/-/oxide-4.1.14.tgz#acfc7869142665693b3b08e4e51d0f419ca13662"
+ integrity sha512-23yx+VUbBwCg2x5XWdB8+1lkPajzLmALEfMb51zZUBYaYVPDQvBSD/WYDqiVyBIo2BZFa3yw1Rpy3G2Jp+K0dw==
+ dependencies:
+ detect-libc "^2.0.4"
+ tar "^7.5.1"
optionalDependencies:
- "@tailwindcss/oxide-android-arm64" "4.1.3"
- "@tailwindcss/oxide-darwin-arm64" "4.1.3"
- "@tailwindcss/oxide-darwin-x64" "4.1.3"
- "@tailwindcss/oxide-freebsd-x64" "4.1.3"
- "@tailwindcss/oxide-linux-arm-gnueabihf" "4.1.3"
- "@tailwindcss/oxide-linux-arm64-gnu" "4.1.3"
- "@tailwindcss/oxide-linux-arm64-musl" "4.1.3"
- "@tailwindcss/oxide-linux-x64-gnu" "4.1.3"
- "@tailwindcss/oxide-linux-x64-musl" "4.1.3"
- "@tailwindcss/oxide-win32-arm64-msvc" "4.1.3"
- "@tailwindcss/oxide-win32-x64-msvc" "4.1.3"
+ "@tailwindcss/oxide-android-arm64" "4.1.14"
+ "@tailwindcss/oxide-darwin-arm64" "4.1.14"
+ "@tailwindcss/oxide-darwin-x64" "4.1.14"
+ "@tailwindcss/oxide-freebsd-x64" "4.1.14"
+ "@tailwindcss/oxide-linux-arm-gnueabihf" "4.1.14"
+ "@tailwindcss/oxide-linux-arm64-gnu" "4.1.14"
+ "@tailwindcss/oxide-linux-arm64-musl" "4.1.14"
+ "@tailwindcss/oxide-linux-x64-gnu" "4.1.14"
+ "@tailwindcss/oxide-linux-x64-musl" "4.1.14"
+ "@tailwindcss/oxide-wasm32-wasi" "4.1.14"
+ "@tailwindcss/oxide-win32-arm64-msvc" "4.1.14"
+ "@tailwindcss/oxide-win32-x64-msvc" "4.1.14"
"@tailwindcss/postcss@^4.0.14":
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/@tailwindcss/postcss/-/postcss-4.1.3.tgz#82bf8b90c134f89f70d8d0293b5b14f234918faf"
- integrity sha512-6s5nJODm98F++QT49qn8xJKHQRamhYHfMi3X7/ltxiSQ9dyRsaFSfFkfaMsanWzf+TMYQtbk8mt5f6cCVXJwfg==
+ version "4.1.14"
+ resolved "https://registry.yarnpkg.com/@tailwindcss/postcss/-/postcss-4.1.14.tgz#29fd4e082b29460e4062a7bc4bf70b38a97f8fc5"
+ integrity sha512-BdMjIxy7HUNThK87C7BC8I1rE8BVUsfNQSI5siQ4JK3iIa3w0XyVvVL9SXLWO//CtYTcp1v7zci0fYwJOjB+Zg==
dependencies:
"@alloc/quick-lru" "^5.2.0"
- "@tailwindcss/node" "4.1.3"
- "@tailwindcss/oxide" "4.1.3"
+ "@tailwindcss/node" "4.1.14"
+ "@tailwindcss/oxide" "4.1.14"
postcss "^8.4.41"
- tailwindcss "4.1.3"
+ tailwindcss "4.1.14"
+
+"@tybys/wasm-util@^0.10.1":
+ version "0.10.1"
+ resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.1.tgz#ecddd3205cf1e2d5274649ff0eedd2991ed7f414"
+ integrity sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==
+ dependencies:
+ tslib "^2.4.0"
"@types/body-parser@*":
- version "1.19.5"
- resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4"
- integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==
+ version "1.19.6"
+ resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.6.tgz#1859bebb8fd7dac9918a45d54c1971ab8b5af474"
+ integrity sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==
dependencies:
"@types/connect" "*"
"@types/node" "*"
@@ -578,9 +641,9 @@
"@types/node" "*"
"@types/express-serve-static-core@^5.0.0":
- version "5.0.6"
- resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz#41fec4ea20e9c7b22f024ab88a95c6bb288f51b8"
- integrity sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.1.0.tgz#74f47555b3d804b54cb7030e6f9aa0c7485cfc5b"
+ integrity sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==
dependencies:
"@types/node" "*"
"@types/qs" "*"
@@ -588,9 +651,9 @@
"@types/send" "*"
"@types/express@^5.0.0":
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.1.tgz#138d741c6e5db8cc273bec5285cd6e9d0779fc9f"
- integrity sha512-UZUw8vjpWFXuDnjFTh7/5c2TWDlQqeXHi6hcN7F2XSVT5P+WmUnnbFS3KA6Jnc6IsEqI2qCVu2bK0R0J4A8ZQQ==
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.3.tgz#6c4bc6acddc2e2a587142e1d8be0bce20757e956"
+ integrity sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==
dependencies:
"@types/body-parser" "*"
"@types/express-serve-static-core" "^5.0.0"
@@ -602,9 +665,9 @@
integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==
"@types/http-errors@*":
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f"
- integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.5.tgz#5b749ab2b16ba113423feb1a64a95dcd30398472"
+ integrity sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==
"@types/keyv@^3.1.4":
version "3.1.4"
@@ -619,28 +682,28 @@
integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==
"@types/node@*":
- version "22.14.0"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-22.14.0.tgz#d3bfa3936fef0dbacd79ea3eb17d521c628bb47e"
- integrity sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==
+ version "24.7.0"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-24.7.0.tgz#a34c9f0d3401db396782e440317dd5d8373c286f"
+ integrity sha512-IbKooQVqUBrlzWTi79E8Fw78l8k1RNtlDDNWsFZs7XonuQSJ8oNYfEeclhprUldXISRMLzBpILuKgPlIxm+/Yw==
dependencies:
- undici-types "~6.21.0"
+ undici-types "~7.14.0"
"@types/node@^20":
- version "20.17.30"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.17.30.tgz#1d93f656d3b869dbef7b796568ac457606ba58d0"
- integrity sha512-7zf4YyHA+jvBNfVrk2Gtvs6x7E8V+YDW05bNfG2XkWDJfYRXrTiP/DsB2zSYTaHX0bGIujTBQdMVAhb+j7mwpg==
+ version "20.19.19"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.19.19.tgz#18c8982becd5728f92e5f1939f2f3dc85604abcd"
+ integrity sha512-pb1Uqj5WJP7wrcbLU7Ru4QtA0+3kAXrkutGiD26wUKzSMgNNaPARTUDQmElUXp64kh3cWdou3Q0C7qwwxqSFmg==
dependencies:
- undici-types "~6.19.2"
+ undici-types "~6.21.0"
"@types/prop-types@*":
- version "15.7.14"
- resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.14.tgz#1433419d73b2a7ebfc6918dcefd2ec0d5cd698f2"
- integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==
+ version "15.7.15"
+ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.15.tgz#e6e5a86d602beaca71ce5163fadf5f95d70931c7"
+ integrity sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==
"@types/qs@*":
- version "6.9.18"
- resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.18.tgz#877292caa91f7c1b213032b34626505b746624c2"
- integrity sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==
+ version "6.14.0"
+ resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.14.0.tgz#d8b60cecf62f2db0fb68e5e006077b9178b85de5"
+ integrity sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==
"@types/range-parser@*":
version "1.2.7"
@@ -648,14 +711,14 @@
integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==
"@types/react-dom@^18":
- version "18.3.6"
- resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.6.tgz#fa59a5e9a33499a792af6c1130f55921ef49d268"
- integrity sha512-nf22//wEbKXusP6E9pfOCDwFdHAX4u172eaJI4YkDRQEZiorm6KfYnSC2SWLDMVWUOWPERmJnN0ujeAfTBLvrw==
+ version "18.3.7"
+ resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.7.tgz#b89ddf2cd83b4feafcc4e2ea41afdfb95a0d194f"
+ integrity sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==
"@types/react@^18":
- version "18.3.20"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.20.tgz#b0dccda9d2f1bc24d2a04b1d0cb5d0b9a3576ad3"
- integrity sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==
+ version "18.3.26"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.26.tgz#4c5970878d30db3d2a0bca1e4eb5f258e391bbeb"
+ integrity sha512-RFA/bURkcKzx/X9oumPG9Vp3D3JUgus/d0b67KB0t5S/raciymilkOa66olh78MUI92QLbEJevO7rvqU/kjwKA==
dependencies:
"@types/prop-types" "*"
csstype "^3.0.2"
@@ -668,26 +731,33 @@
"@types/node" "*"
"@types/send@*":
- version "0.17.4"
- resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a"
- integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@types/send/-/send-1.2.0.tgz#ae9dfa0e3ab0306d3c566182324a54c4be2fb45a"
+ integrity sha512-zBF6vZJn1IaMpg3xUF25VK3gd3l8zwE0ZLRX7dsQyQi+jp4E8mMDJNGDYnYse+bQhYwWERTxVwHpi3dMOq7RKQ==
+ dependencies:
+ "@types/node" "*"
+
+"@types/send@<1":
+ version "0.17.5"
+ resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.5.tgz#d991d4f2b16f2b1ef497131f00a9114290791e74"
+ integrity sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==
dependencies:
"@types/mime" "^1"
"@types/node" "*"
"@types/serve-static@*":
- version "1.15.7"
- resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714"
- integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==
+ version "1.15.9"
+ resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.9.tgz#f9b08ab7dd8bbb076f06f5f983b683654fe0a025"
+ integrity sha512-dOTIuqpWLyl3BBXU3maNQsS4A3zuuoYRNIvYSxxhebPfXg2mzWQEPne/nlJ37yOse6uGgR386uTpdsx4D0QZWA==
dependencies:
"@types/http-errors" "*"
"@types/node" "*"
- "@types/send" "*"
+ "@types/send" "<1"
"@types/uikit@^3.7.0":
- version "3.14.5"
- resolved "https://registry.yarnpkg.com/@types/uikit/-/uikit-3.14.5.tgz#a9e250fa71968c3e145bfda7c99f6d9680db2d3e"
- integrity sha512-3Q1CRzoAVLm+XNCP/2P5DbLuX98fkNLYxGQ1qUdV6cdzDTBbyVeH+est0LTZPtro9FUwXTNu8WfxfwLymFbZvQ==
+ version "3.23.0"
+ resolved "https://registry.yarnpkg.com/@types/uikit/-/uikit-3.23.0.tgz#8d56d4ef31ea0832142fd1f1e9e4b8285e62f724"
+ integrity sha512-GTn8/K+f4AjFxtLqRKWzjaVKckQp/rHcl20IO09salh2VjyFb9CqeFugL95skO6qbbJLil3PE1MmNajrSj5gMg==
"@types/uuid@^8.3.4":
version "8.3.4"
@@ -710,10 +780,10 @@
magic-string "^0.27.0"
react-refresh "^0.14.0"
-ably@^2.9.0:
- version "2.9.0"
- resolved "https://registry.yarnpkg.com/ably/-/ably-2.9.0.tgz#e6e34d72f22082b6242ed23f1d649fc44eb82e1f"
- integrity sha512-ddaurgvYHGmVVZkd5U2xJgLrbVdtAIw1RunfuZroE/ZTsmK2+vUnAZ7aKhR20cwOFP3QyLFYs6IfvwaijnIPlA==
+ably@^2.13.0:
+ version "2.14.0"
+ resolved "https://registry.yarnpkg.com/ably/-/ably-2.14.0.tgz#257b762d6c5af27e42ad885e1e2fc650568ac3a3"
+ integrity sha512-GWNza+URnh/W5IuoJX7nXJpQCs2Dxby6t5A20vL3PBqGIJceA94/1xje4HOZbqFtMEPkRVsYHBIEuQRWL+CuvQ==
dependencies:
"@ably/msgpack-js" "^0.4.0"
dequal "^2.0.3"
@@ -736,9 +806,9 @@ acorn-jsx@^5.3.2:
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
acorn@^8.9.0:
- version "8.14.1"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb"
- integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==
+ version "8.15.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816"
+ integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==
ajv@^6.12.4:
version "6.12.6"
@@ -756,9 +826,9 @@ ansi-regex@^5.0.1:
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
ansi-regex@^6.0.1:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654"
- integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==
+ version "6.2.2"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1"
+ integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==
ansi-styles@^4.0.0, ansi-styles@^4.1.0:
version "4.3.0"
@@ -768,9 +838,9 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
color-convert "^2.0.1"
ansi-styles@^6.1.0:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
- integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
+ version "6.2.3"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041"
+ integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==
any-promise@^1.0.0:
version "1.3.0"
@@ -829,6 +899,11 @@ base64-js@1.0.2:
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.0.2.tgz#474211c95e6cf2a547db461e4f6778b51d08fa65"
integrity sha512-ZXBDPMt/v/8fsIqn+Z5VwrhdR6jVka0bYobHdGia0Nxi7BJ9i/Uvml3AocHIBtIIBhZjBw5MR0aR4ROs/8+SNg==
+baseline-browser-mapping@^2.8.9:
+ version "2.8.12"
+ resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.12.tgz#7cb875f4c5b5ab4528109df277b2f0e1971ba27e"
+ integrity sha512-vAPMQdnyKCBtkmQA6FMCBvU9qFIppS3nzyXnEM+Lo2IAhG4Mpjv9cCxMudhgV3YdNNJv6TNqXy97dfRVL2LmaQ==
+
binary-extensions@^2.0.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522"
@@ -861,17 +936,17 @@ bops@^1.0.1:
to-utf8 "0.0.1"
brace-expansion@^1.1.7:
- version "1.1.11"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
- integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ version "1.1.12"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843"
+ integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==
dependencies:
balanced-match "^1.0.0"
concat-map "0.0.1"
brace-expansion@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
- integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7"
+ integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==
dependencies:
balanced-match "^1.0.0"
@@ -883,14 +958,15 @@ braces@^3.0.3, braces@~3.0.2:
fill-range "^7.1.1"
browserslist@^4.24.0, browserslist@^4.24.4:
- version "4.24.4"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b"
- integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==
+ version "4.26.3"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.26.3.tgz#40fbfe2d1cd420281ce5b1caa8840049c79afb56"
+ integrity sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==
dependencies:
- caniuse-lite "^1.0.30001688"
- electron-to-chromium "^1.5.73"
- node-releases "^2.0.19"
- update-browserslist-db "^1.1.1"
+ baseline-browser-mapping "^2.8.9"
+ caniuse-lite "^1.0.30001746"
+ electron-to-chromium "^1.5.227"
+ node-releases "^2.0.21"
+ update-browserslist-db "^1.1.3"
bytes@3.1.2:
version "3.1.2"
@@ -941,10 +1017,10 @@ camelcase-css@^2.0.1:
resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
-caniuse-lite@^1.0.30001688, caniuse-lite@^1.0.30001702:
- version "1.0.30001713"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001713.tgz#6b33a8857e6c7dcb41a0caa2dd0f0489c823a52d"
- integrity sha512-wCIWIg+A4Xr7NfhTuHdX+/FKh3+Op3LBbSp2N5Pfx6T/LhdQy3GTyoTg48BReaW/MyMNZAkTadsBtai3ldWK0Q==
+caniuse-lite@^1.0.30001702, caniuse-lite@^1.0.30001746:
+ version "1.0.30001748"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001748.tgz#628a5a9293014e58f8ba1216bb4966b04c58bee0"
+ integrity sha512-5P5UgAr0+aBmNiplks08JLw+AW/XG/SurlgZLgB1dDLfAw7EfRGxIwzPHxdSCGY/BTKDqIVyJL87cCN6s0ZR0w==
chalk@^4.0.0:
version "4.1.2"
@@ -969,6 +1045,11 @@ chokidar@^3.6.0:
optionalDependencies:
fsevents "~2.3.2"
+chownr@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4"
+ integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==
+
clone-response@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3"
@@ -1065,9 +1146,9 @@ debug@2.6.9:
ms "2.0.0"
debug@^4.1.0, debug@^4.3.1, debug@^4.3.2:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a"
- integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
+ version "4.4.3"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a"
+ integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
dependencies:
ms "^2.1.3"
@@ -1103,10 +1184,10 @@ destroy@1.2.0:
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
-detect-libc@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700"
- integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==
+detect-libc@^2.0.3, detect-libc@^2.0.4:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad"
+ integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==
didyoumean@^1.2.2:
version "1.2.2"
@@ -1126,9 +1207,9 @@ doctrine@^3.0.0:
esutils "^2.0.2"
dotenv@^16.4.5:
- version "16.4.7"
- resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26"
- integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==
+ version "16.6.1"
+ resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.6.1.tgz#773f0e69527a8315c7285d5ee73c4459d20a8020"
+ integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==
dunder-proto@^1.0.1:
version "1.0.1"
@@ -1149,10 +1230,10 @@ ee-first@1.1.1:
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
-electron-to-chromium@^1.5.73:
- version "1.5.135"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.135.tgz#6d835020fa0c7f02f30d7608c2f3c0a764236699"
- integrity sha512-8gXUdEmvb+WCaYUhA0Svr08uSeRjM2w3x5uHOc1QbaEVzJXB8rgm5eptieXzyKoVEtinLvW6MtTcurA65PeS1Q==
+electron-to-chromium@^1.5.227:
+ version "1.5.232"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.232.tgz#3de180ee54c14c58d56a290f588eef3a934ebda6"
+ integrity sha512-ENirSe7wf8WzyPCibqKUG1Cg43cPaxH4wRR7AJsX7MCABCHBIOFqvaYODSLKUuZdraxUTHRE/0A2Aq8BYKEHOg==
emoji-regex@^8.0.0:
version "8.0.0"
@@ -1175,16 +1256,16 @@ encodeurl@~2.0.0:
integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==
end-of-stream@^1.1.0:
- version "1.4.4"
- resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
- integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ version "1.4.5"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c"
+ integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==
dependencies:
once "^1.4.0"
-enhanced-resolve@^5.18.1:
- version "5.18.1"
- resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz#728ab082f8b7b6836de51f1637aab5d3b9568faf"
- integrity sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==
+enhanced-resolve@^5.18.3:
+ version "5.18.3"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz#9b5f4c5c076b8787c78fe540392ce76a88855b44"
+ integrity sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==
dependencies:
graceful-fs "^4.2.4"
tapable "^2.2.0"
@@ -1487,9 +1568,9 @@ fraction.js@^4.3.7:
integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==
franken-ui@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/franken-ui/-/franken-ui-2.0.0.tgz#c6139119e7d8929a955324274651971fa8d8e551"
- integrity sha512-MbmGsR2ADh5BonDTCUoUg4BAqcvObQPR4g45FWore6eiVtr0qofhelxyVuSEmcSKBqIeI/d6DpMEFdRu2e4Dow==
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/franken-ui/-/franken-ui-2.1.0.tgz#17aa2939375ff710fce2193f255382ff06e6aefe"
+ integrity sha512-4LdQ50zubYCKiUsInvjHgMCnWI4y9IJL40eLDmKHss5YJ4pLEJgoXs9tTVPdID9oaDPKvyL8OBSW/HBtppHxDg==
fresh@0.5.2:
version "0.5.2"
@@ -1585,11 +1666,6 @@ glob@^7.1.3:
once "^1.3.0"
path-is-absolute "^1.0.0"
-globals@^11.1.0:
- version "11.12.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
- integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
-
globals@^13.19.0:
version "13.24.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171"
@@ -1647,9 +1723,9 @@ hasown@^2.0.2:
function-bind "^1.1.2"
http-cache-semantics@^4.0.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
- integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5"
+ integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==
http-errors@2.0.0:
version "2.0.0"
@@ -1768,15 +1844,15 @@ jackspeak@^3.1.2:
optionalDependencies:
"@pkgjs/parseargs" "^0.11.0"
-jiti@^1.21.6:
+jiti@^1.21.7:
version "1.21.7"
resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.7.tgz#9dd81043424a3d28458b193d965f0d18a2300ba9"
integrity sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==
-jiti@^2.4.2:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.4.2.tgz#d19b7732ebb6116b06e2038da74a55366faef560"
- integrity sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==
+jiti@^2.6.0:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.6.1.tgz#178ef2fc9a1a594248c20627cd820187a4d78d92"
+ integrity sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
@@ -1830,75 +1906,75 @@ levn@^0.4.1:
prelude-ls "^1.2.1"
type-check "~0.4.0"
-lightningcss-darwin-arm64@1.29.2:
- version "1.29.2"
- resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.2.tgz#6ceff38b01134af48e859394e1ca21e5d49faae6"
- integrity sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==
-
-lightningcss-darwin-x64@1.29.2:
- version "1.29.2"
- resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.2.tgz#891b6f9e57682d794223c33463ca66d3af3fb038"
- integrity sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==
-
-lightningcss-freebsd-x64@1.29.2:
- version "1.29.2"
- resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.2.tgz#8a95f9ab73b2b2b0beefe1599fafa8b058938495"
- integrity sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==
-
-lightningcss-linux-arm-gnueabihf@1.29.2:
- version "1.29.2"
- resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.2.tgz#5c60bbf92b39d7ed51e363f7b98a7111bf5914a1"
- integrity sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==
-
-lightningcss-linux-arm64-gnu@1.29.2:
- version "1.29.2"
- resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.2.tgz#e73d7608c4cce034c3654e5e8b53be74846224de"
- integrity sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==
-
-lightningcss-linux-arm64-musl@1.29.2:
- version "1.29.2"
- resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.2.tgz#a95a18d5a909831c092e0a8d2de4b9ac1a8db151"
- integrity sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==
-
-lightningcss-linux-x64-gnu@1.29.2:
- version "1.29.2"
- resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.2.tgz#551ca07e565394928642edee92acc042e546cb78"
- integrity sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==
-
-lightningcss-linux-x64-musl@1.29.2:
- version "1.29.2"
- resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.2.tgz#2fd164554340831bce50285b57101817850dd258"
- integrity sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==
-
-lightningcss-win32-arm64-msvc@1.29.2:
- version "1.29.2"
- resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.2.tgz#da43ea49fafc5d2de38e016f1a8539d5eed98318"
- integrity sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==
-
-lightningcss-win32-x64-msvc@1.29.2:
- version "1.29.2"
- resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.2.tgz#ddefaa099a39b725b2f5bbdcb9fc718435cc9797"
- integrity sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==
-
-lightningcss@1.29.2:
- version "1.29.2"
- resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.29.2.tgz#f5f0fd6e63292a232697e6fe709da5b47624def3"
- integrity sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==
+lightningcss-darwin-arm64@1.30.1:
+ version "1.30.1"
+ resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz#3d47ce5e221b9567c703950edf2529ca4a3700ae"
+ integrity sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==
+
+lightningcss-darwin-x64@1.30.1:
+ version "1.30.1"
+ resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz#e81105d3fd6330860c15fe860f64d39cff5fbd22"
+ integrity sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==
+
+lightningcss-freebsd-x64@1.30.1:
+ version "1.30.1"
+ resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz#a0e732031083ff9d625c5db021d09eb085af8be4"
+ integrity sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==
+
+lightningcss-linux-arm-gnueabihf@1.30.1:
+ version "1.30.1"
+ resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz#1f5ecca6095528ddb649f9304ba2560c72474908"
+ integrity sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==
+
+lightningcss-linux-arm64-gnu@1.30.1:
+ version "1.30.1"
+ resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz#eee7799726103bffff1e88993df726f6911ec009"
+ integrity sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==
+
+lightningcss-linux-arm64-musl@1.30.1:
+ version "1.30.1"
+ resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz#f2e4b53f42892feeef8f620cbb889f7c064a7dfe"
+ integrity sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==
+
+lightningcss-linux-x64-gnu@1.30.1:
+ version "1.30.1"
+ resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz#2fc7096224bc000ebb97eea94aea248c5b0eb157"
+ integrity sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==
+
+lightningcss-linux-x64-musl@1.30.1:
+ version "1.30.1"
+ resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz#66dca2b159fd819ea832c44895d07e5b31d75f26"
+ integrity sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==
+
+lightningcss-win32-arm64-msvc@1.30.1:
+ version "1.30.1"
+ resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz#7d8110a19d7c2d22bfdf2f2bb8be68e7d1b69039"
+ integrity sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==
+
+lightningcss-win32-x64-msvc@1.30.1:
+ version "1.30.1"
+ resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz#fd7dd008ea98494b85d24b4bea016793f2e0e352"
+ integrity sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==
+
+lightningcss@1.30.1:
+ version "1.30.1"
+ resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.30.1.tgz#78e979c2d595bfcb90d2a8c0eb632fe6c5bfed5d"
+ integrity sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==
dependencies:
detect-libc "^2.0.3"
optionalDependencies:
- lightningcss-darwin-arm64 "1.29.2"
- lightningcss-darwin-x64 "1.29.2"
- lightningcss-freebsd-x64 "1.29.2"
- lightningcss-linux-arm-gnueabihf "1.29.2"
- lightningcss-linux-arm64-gnu "1.29.2"
- lightningcss-linux-arm64-musl "1.29.2"
- lightningcss-linux-x64-gnu "1.29.2"
- lightningcss-linux-x64-musl "1.29.2"
- lightningcss-win32-arm64-msvc "1.29.2"
- lightningcss-win32-x64-msvc "1.29.2"
-
-lilconfig@^3.0.0, lilconfig@^3.1.1, lilconfig@^3.1.3:
+ lightningcss-darwin-arm64 "1.30.1"
+ lightningcss-darwin-x64 "1.30.1"
+ lightningcss-freebsd-x64 "1.30.1"
+ lightningcss-linux-arm-gnueabihf "1.30.1"
+ lightningcss-linux-arm64-gnu "1.30.1"
+ lightningcss-linux-arm64-musl "1.30.1"
+ lightningcss-linux-x64-gnu "1.30.1"
+ lightningcss-linux-x64-musl "1.30.1"
+ lightningcss-win32-arm64-msvc "1.30.1"
+ lightningcss-win32-x64-msvc "1.30.1"
+
+lilconfig@^3.1.1, lilconfig@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4"
integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==
@@ -1961,6 +2037,13 @@ magic-string@^0.27.0:
dependencies:
"@jridgewell/sourcemap-codec" "^1.4.13"
+magic-string@^0.30.19:
+ version "0.30.19"
+ resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.19.tgz#cebe9f104e565602e5d2098c5f2e79a77cc86da9"
+ integrity sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==
+ dependencies:
+ "@jridgewell/sourcemap-codec" "^1.5.5"
+
math-intrinsics@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
@@ -2044,11 +2127,18 @@ minimatch@^9.0.4:
dependencies:
brace-expansion "^2.0.1"
-"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2:
+"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4, minipass@^7.1.2:
version "7.1.2"
resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707"
integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
+minizlib@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.1.0.tgz#6ad76c3a8f10227c9b51d1c9ac8e30b27f5a251c"
+ integrity sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==
+ dependencies:
+ minipass "^7.1.2"
+
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
@@ -2068,15 +2158,15 @@ mz@^2.7.0:
object-assign "^4.0.1"
thenify-all "^1.0.0"
-nanoid@^3.2.0, nanoid@^3.3.7, nanoid@^3.3.8:
+nanoid@^3.2.0, nanoid@^3.3.11, nanoid@^3.3.7:
version "3.3.11"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b"
integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==
nanoid@^5.0.7:
- version "5.1.5"
- resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-5.1.5.tgz#f7597f9d9054eb4da9548cdd53ca70f1790e87de"
- integrity sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==
+ version "5.1.6"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-5.1.6.tgz#30363f664797e7d40429f6c16946d6bd7a3f26c9"
+ integrity sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==
natural-compare@^1.4.0:
version "1.4.0"
@@ -2088,10 +2178,10 @@ negotiator@0.6.3:
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
-node-releases@^2.0.19:
- version "2.0.19"
- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314"
- integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==
+node-releases@^2.0.21:
+ version "2.0.23"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.23.tgz#2ecf3d7ba571ece05c67c77e5b7b1b6fb9e18cea"
+ integrity sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==
normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0"
@@ -2218,7 +2308,7 @@ path-to-regexp@0.1.12:
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7"
integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==
-picocolors@^1.0.0, picocolors@^1.1.1:
+picocolors@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
@@ -2255,21 +2345,13 @@ postcss-import@^15.1.0:
resolve "^1.1.7"
postcss-js@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2"
- integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.1.0.tgz#003b63c6edde948766e40f3daf7e997ae43a5ce6"
+ integrity sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==
dependencies:
camelcase-css "^2.0.1"
-postcss-load-config@^4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3"
- integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==
- dependencies:
- lilconfig "^3.0.0"
- yaml "^2.3.4"
-
-postcss-load-config@^6.0.1:
+"postcss-load-config@^4.0.2 || ^5.0 || ^6.0", postcss-load-config@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-6.0.1.tgz#6fd7dcd8ae89badcf1b2d644489cbabf83aa8096"
integrity sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==
@@ -2297,11 +2379,11 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0:
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
postcss@^8.4.27, postcss@^8.4.41, postcss@^8.4.47, postcss@^8.5.3:
- version "8.5.3"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.3.tgz#1463b6f1c7fb16fe258736cba29a2de35237eafb"
- integrity sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==
+ version "8.5.6"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c"
+ integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==
dependencies:
- nanoid "^3.3.8"
+ nanoid "^3.3.11"
picocolors "^1.1.1"
source-map-js "^1.2.1"
@@ -2319,9 +2401,9 @@ proxy-addr@~2.0.7:
ipaddr.js "1.9.1"
pump@^3.0.0:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8"
- integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.3.tgz#151d979f1a29668dc0025ec589a455b53282268d"
+ integrity sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==
dependencies:
end-of-stream "^1.1.0"
once "^1.3.1"
@@ -2382,17 +2464,17 @@ react-refresh@^0.14.0:
integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==
react-router-dom@^6.22.2:
- version "6.30.0"
- resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.30.0.tgz#a64774104508bff56b1affc2796daa3f7e76b7df"
- integrity sha512-x30B78HV5tFk8ex0ITwzC9TTZMua4jGyA9IUlH1JLQYQTFyxr/ZxwOJq7evg1JX1qGVUcvhsmQSKdPncQrjTgA==
+ version "6.30.1"
+ resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.30.1.tgz#da2580c272ddb61325e435478566be9563a4a237"
+ integrity sha512-llKsgOkZdbPU1Eg3zK8lCn+sjD9wMRZZPuzmdWWX5SUs8OFkN5HnFVC0u5KMeMaC9aoancFI/KoLuKPqN+hxHw==
dependencies:
"@remix-run/router" "1.23.0"
- react-router "6.30.0"
+ react-router "6.30.1"
-react-router@6.30.0:
- version "6.30.0"
- resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.30.0.tgz#9789d775e63bc0df60f39ced77c8c41f1e01ff90"
- integrity sha512-D3X8FyH9nBcTSHGdEKurK7r8OYE1kKFn3d/CF+CoxbSHkxU7o37+Uh7eAHRXr6k2tSExXYO++07PeXJtA/dEhQ==
+react-router@6.30.1:
+ version "6.30.1"
+ resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.30.1.tgz#ecb3b883c9ba6dbf5d319ddbc996747f4ab9f4c3"
+ integrity sha512-X1m21aEmxGXqENEPG3T6u0Th7g0aS4ZmoNynhbs+Cn+q+QGTLt+d5IQ2bHAXKzKcxGJjxACpVbnYQSCRcfxHlQ==
dependencies:
"@remix-run/router" "1.23.0"
@@ -2593,7 +2675,6 @@ statuses@2.0.1:
integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0:
- name string-width-cjs
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -2619,9 +2700,9 @@ string-width@^5.0.1, string-width@^5.1.2:
ansi-regex "^5.0.1"
strip-ansi@^7.0.1:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
- integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.2.tgz#132875abde678c7ea8d691533f2e7e22bb744dba"
+ integrity sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==
dependencies:
ansi-regex "^6.0.1"
@@ -2656,9 +2737,9 @@ supports-preserve-symlinks-flag@^1.0.0:
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
tailwindcss@3:
- version "3.4.17"
- resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.17.tgz#ae8406c0f96696a631c790768ff319d46d5e5a63"
- integrity sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==
+ version "3.4.18"
+ resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.18.tgz#9fa9650aace186644b608242f1e57d2d55593301"
+ integrity sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==
dependencies:
"@alloc/quick-lru" "^5.2.0"
arg "^5.0.2"
@@ -2668,7 +2749,7 @@ tailwindcss@3:
fast-glob "^3.3.2"
glob-parent "^6.0.2"
is-glob "^4.0.3"
- jiti "^1.21.6"
+ jiti "^1.21.7"
lilconfig "^3.1.3"
micromatch "^4.0.8"
normalize-path "^3.0.0"
@@ -2677,21 +2758,32 @@ tailwindcss@3:
postcss "^8.4.47"
postcss-import "^15.1.0"
postcss-js "^4.0.1"
- postcss-load-config "^4.0.2"
+ postcss-load-config "^4.0.2 || ^5.0 || ^6.0"
postcss-nested "^6.2.0"
postcss-selector-parser "^6.1.2"
resolve "^1.22.8"
sucrase "^3.35.0"
-tailwindcss@4.1.3:
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-4.1.3.tgz#f5a6b4451295c06e213013697f7193be1630fa46"
- integrity sha512-2Q+rw9vy1WFXu5cIxlvsabCwhU2qUwodGq03ODhLJ0jW4ek5BUtoCsnLB0qG+m8AHgEsSJcJGDSDe06FXlP74g==
+tailwindcss@4.1.14:
+ version "4.1.14"
+ resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-4.1.14.tgz#a5907cc2202a2a1f5f15bac6f2031e53117e43a8"
+ integrity sha512-b7pCxjGO98LnxVkKjaZSDeNuljC4ueKUddjENJOADtubtdo8llTaJy7HwBMeLNSSo2N5QIAgklslK1+Ir8r6CA==
tapable@^2.2.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
- integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.0.tgz#7e3ea6d5ca31ba8e078b560f0d83ce9a14aa8be6"
+ integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==
+
+tar@^7.5.1:
+ version "7.5.1"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.1.tgz#750a8bd63b7c44c1848e7bf982260a083cf747c9"
+ integrity sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==
+ dependencies:
+ "@isaacs/fs-minipass" "^4.0.0"
+ chownr "^3.0.0"
+ minipass "^7.1.2"
+ minizlib "^3.1.0"
+ yallist "^5.0.0"
text-table@^0.2.0:
version "0.2.0"
@@ -2760,36 +2852,36 @@ type-is@~1.6.18:
mime-types "~2.1.24"
typescript@^5:
- version "5.8.3"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e"
- integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==
+ version "5.9.3"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f"
+ integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==
uikit@^3.7.0:
- version "3.23.6"
- resolved "https://registry.yarnpkg.com/uikit/-/uikit-3.23.6.tgz#92398eb8d9ac74c7ae7b2f85fde1b6e4ae1bde70"
- integrity sha512-7VuR+q+gKo6MQK0lJMte6gtyvk22kSrLHV1rgGpB9UvVjkzpQyJb5qEMKvGpokZA3vG6czTOvD88iwTleQLmKA==
+ version "3.24.1"
+ resolved "https://registry.yarnpkg.com/uikit/-/uikit-3.24.1.tgz#fe8c02d74031c36d82bd59a8210150276479bd37"
+ integrity sha512-uuQVut6ChUXUIw3/UeJLkbjD6RM5DO3+OiwGOzvt92L6uBik1WVZiTYgbIojmCQAOyZmOdl6qsp2FYRBIx6PYQ==
ulid@^2.3.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/ulid/-/ulid-2.4.0.tgz#9d9ee22e63f4390ee1bcd9ad09fca39d8ae0afed"
integrity sha512-fIRiVTJNcSRmXKPZtGzFQv9WRrZ3M9eoptl/teFJvjOzmpU+/K/JH6HZ8deBfb5vMEpicJcLn7JmvdknlMq7Zg==
-undici-types@~6.19.2:
- version "6.19.8"
- resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02"
- integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==
-
undici-types@~6.21.0:
version "6.21.0"
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb"
integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==
+undici-types@~7.14.0:
+ version "7.14.0"
+ resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.14.0.tgz#4c037b32ca4d7d62fae042174604341588bc0840"
+ integrity sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==
+
unpipe@1.0.0, unpipe@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
-update-browserslist-db@^1.1.1:
+update-browserslist-db@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420"
integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==
@@ -2878,19 +2970,19 @@ wrappy@1:
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
ws@^8.17.1:
- version "8.18.1"
- resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.1.tgz#ea131d3784e1dfdff91adb0a4a116b127515e3cb"
- integrity sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==
+ version "8.18.3"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472"
+ integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==
yallist@^3.0.2:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
-yaml@^2.3.4:
- version "2.7.1"
- resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.7.1.tgz#44a247d1b88523855679ac7fa7cda6ed7e135cf6"
- integrity sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==
+yallist@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533"
+ integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==
yocto-queue@^0.1.0:
version "0.1.0"
diff --git a/src/components/Examples/ExamplesRenderer.tsx b/src/components/Examples/ExamplesRenderer.tsx
index 39a50a65fb..e0c97a433a 100644
--- a/src/components/Examples/ExamplesRenderer.tsx
+++ b/src/components/Examples/ExamplesRenderer.tsx
@@ -37,9 +37,10 @@ const UserIndicator = ({ user }: { user: string }) => {
const getDependencies = (id: string, products: string[], activeLanguage: LanguageKey) => {
return {
- ably: '^2.9.0',
+ ably: '^2.13.0',
nanoid: '^5.0.7',
minifaker: '1.34.1',
+ 'franken-ui': '^2.0.0',
...(products.includes('auth') ? { cors: '^2.8.5' } : {}),
...(products.includes('chat')
? { '@ably/chat': '^0.14.0', '@ably/chat-react-ui-components': '^0.1.2', clsx: '^2.1.1' }
@@ -185,6 +186,7 @@ const ExamplesRenderer = ({
showOpenInCodeSandbox={false}
showRefreshButton
{...(id === 'pub-sub-message-encryption' && { startRoute: '?encrypted=true' })}
+ {...(id === 'pub-sub-message-annotations' && { startRoute: '?clientId=user1' })}
/>
diff --git a/src/data/examples/index.ts b/src/data/examples/index.ts
index b3414951bc..2d24fb03f8 100644
--- a/src/data/examples/index.ts
+++ b/src/data/examples/index.ts
@@ -188,6 +188,26 @@ export const examples: Example[] = [
metaTitle: `Implement message rewind with the Ably Pub/Sub SDK`,
metaDescription: `Use the Ably Pub/Sub SDK to implement message rewind. Automatically retrieve recent messages on subscribe to improve app state continuity.`,
},
+ {
+ id: 'pub-sub-message-annotations',
+ name: 'Message Annotations',
+ description: 'Annotate pub/sub messages with additional data.',
+ products: ['pubsub'],
+ layout: 'double-horizontal',
+ visibleFiles: [
+ 'src/script.ts',
+ 'src/types.ts',
+ 'src/config.ts',
+ 'src/ably.ts',
+ 'src/components/annotations.ts',
+ 'src/components/arrow.ts',
+ 'src/components/badge.ts',
+ 'src/components/message.ts',
+ 'src/components/summary.ts',
+ ],
+ metaTitle: `Implement message annotations with the Ably Pub/Sub SDK`,
+ metaDescription: `Use the Ably Pub/Sub JavaScript SDK to implement message annotations. Annotate messages with additional data and view summaries of the annotations.`,
+ },
{
id: 'spaces-avatar-stack',
name: 'Avatar stack',
diff --git a/src/templates/examples.tsx b/src/templates/examples.tsx
index b932375276..c6a26452cd 100644
--- a/src/templates/examples.tsx
+++ b/src/templates/examples.tsx
@@ -89,14 +89,18 @@ const Examples = ({ pageContext }: { pageContext: { example: ExampleWithContent
window.history.replaceState({}, '', window.location.pathname + '?' + urlParams.toString());
// There is a bug in Sandpack where startRoute is lost on re-renders. This is a workaround to reintroduce it post-language change.
- if (example.id === 'pub-sub-message-encryption') {
+ if (example.id === 'pub-sub-message-encryption' || example.id === 'pub-sub-message-annotations') {
if (isFirstRender.current) {
isFirstRender.current = false;
} else {
setTimeout(() => {
const iframe = document.querySelector('.sp-preview-iframe') as HTMLIFrameElement;
if (iframe) {
- iframe.setAttribute('src', iframe.getAttribute('src') + '?encrypted=true');
+ let queryParams = 'encrypted=true'; // for pub-sub-message-encryption
+ if (example.id === 'pub-sub-message-annotations') {
+ queryParams = 'clientId=user1';
+ }
+ iframe.setAttribute('src', iframe.getAttribute('src') + '?' + queryParams);
}
}, 100);
}