diff --git a/COMPONENT_INDEX.md b/COMPONENT_INDEX.md
index b307e9a8..ab1d96a8 100644
--- a/COMPONENT_INDEX.md
+++ b/COMPONENT_INDEX.md
@@ -1,6 +1,6 @@
# Component Index
-> 161 components exported from carbon-components-svelte@0.30.0.
+> 166 components exported from carbon-components-svelte@0.30.0.
## Components
@@ -24,6 +24,11 @@
- [`ComposedModal`](#composedmodal)
- [`Content`](#content)
- [`ContentSwitcher`](#contentswitcher)
+- [`ContextMenu`](#contextmenu)
+- [`ContextMenuDivider`](#contextmenudivider)
+- [`ContextMenuGroup`](#contextmenugroup)
+- [`ContextMenuOption`](#contextmenuoption)
+- [`ContextMenuRadioGroup`](#contextmenuradiogroup)
- [`Copy`](#copy)
- [`CopyButton`](#copybutton)
- [`DataTable`](#datatable)
@@ -723,6 +728,116 @@ None.
| mouseenter | forwarded | -- |
| mouseleave | forwarded | -- |
+## `ContextMenu`
+
+### Props
+
+| Prop name | Kind | Reactive | Type | Default value | Description |
+| :-------- | :--------------- | :------- | :---------------------------------------- | ------------------ | -------------------------------------------------------------------------------- |
+| ref | let
| Yes | null | HTMLUListElement
| null
| Obtain a reference to the unordered list HTML element |
+| y | let
| Yes | number
| 0
| Specify the vertical offset of the menu position |
+| x | let
| Yes | number
| 0
| Specify the horizontal offset of the menu position |
+| open | let
| Yes | boolean
| false
| Set to `true` to open the menu
Either `x` and `y` must be greater than zero |
+
+### Slots
+
+| Slot name | Default | Props | Fallback |
+| :-------- | :------ | :---- | :------- |
+| -- | Yes | -- | -- |
+
+### Events
+
+| Event name | Type | Detail |
+| :--------- | :--------- | :----- |
+| click | forwarded | -- |
+| keydown | forwarded | -- |
+| close | dispatched | -- |
+
+## `ContextMenuDivider`
+
+### Props
+
+None.
+
+### Slots
+
+None.
+
+### Events
+
+None.
+
+## `ContextMenuGroup`
+
+### Props
+
+| Prop name | Kind | Reactive | Type | Default value | Description |
+| :---------- | :--------------- | :------- | :-------------------- | --------------- | ---------------------- |
+| selectedIds | let
| Yes | string[]
| []
| -- |
+| labelText | let
| No | string
| ""
| Specify the label text |
+
+### Slots
+
+| Slot name | Default | Props | Fallback |
+| :-------- | :------ | :---- | :------- |
+| -- | Yes | -- | -- |
+
+### Events
+
+None.
+
+## `ContextMenuOption`
+
+### Props
+
+| Prop name | Kind | Reactive | Type | Default value | Description |
+| :----------- | :--------------- | :------- | :----------------------------------------------------------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------- |
+| ref | let
| Yes | null | HTMLLIElement
| null
| Obtain a reference to the list item HTML element |
+| selectable | let
| Yes | boolean
| false
| Set to `true` to enable the selectable variant
Automatically set to `true` if `selected` is `true` |
+| selected | let
| Yes | boolean
| false
| Set to `true` to use the selected variant |
+| icon | let
| Yes | typeof import("carbon-icons-svelte").CarbonIcon
| -- | Specify the icon from `carbon-icons-svelte` to render
Icon is rendered to the left of the label text |
+| indented | let
| Yes | boolean
| false
| Set to `true` to indent the label |
+| disabled | let
| No | boolean
| false
| Set to `true` to enable the disabled state |
+| labelText | let
| No | string
| ""
| Specify the label text
Alternatively, use the "labelText" slot (e.g., <span slot="labelText">...</span>) |
+| shortcutText | let
| No | string
| ""
| Specify the shortcut text
Alternatively, use the "shortcutText" slot (e.g., <span slot="shortcutText">...</span>) |
+| id | let
| No | string
| "ccs-" + Math.random().toString(36)
| Specify the id
It's highly recommended to provide an id when using in a selectable/radio menu group |
+
+### Slots
+
+| Slot name | Default | Props | Fallback |
+| :----------- | :------ | :---- | :-------------------------- |
+| -- | Yes | -- | -- |
+| labelText | No | -- | {labelText}
|
+| shortcutText | No | -- | {shortcutText}
|
+
+### Events
+
+| Event name | Type | Detail |
+| :--------- | :--------- | :----- |
+| keydown | forwarded | -- |
+| mouseenter | forwarded | -- |
+| mouseleave | forwarded | -- |
+| click | dispatched | -- |
+
+## `ContextMenuRadioGroup`
+
+### Props
+
+| Prop name | Kind | Reactive | Type | Default value | Description |
+| :--------- | :--------------- | :------- | :------------------ | --------------- | ------------------------------- |
+| selectedId | let
| Yes | string
| ""
| Set the selected radio group id |
+| labelText | let
| No | string
| ""
| Specify the label text |
+
+### Slots
+
+| Slot name | Default | Props | Fallback |
+| :-------- | :------ | :---- | :------- |
+| -- | Yes | -- | -- |
+
+### Events
+
+None.
+
## `Copy`
### Props
diff --git a/docs/src/COMPONENT_API.json b/docs/src/COMPONENT_API.json
index 9da9b198..2f714f04 100644
--- a/docs/src/COMPONENT_API.json
+++ b/docs/src/COMPONENT_API.json
@@ -1,5 +1,5 @@
{
- "total": 161,
+ "total": 166,
"components": [
{
"moduleName": "Accordion",
@@ -1556,6 +1556,243 @@
"typedefs": [],
"rest_props": { "type": "Element", "name": "div" }
},
+ {
+ "moduleName": "ContextMenu",
+ "filePath": "src/ContextMenu/ContextMenu.svelte",
+ "props": [
+ {
+ "name": "open",
+ "kind": "let",
+ "description": "Set to `true` to open the menu\nEither `x` and `y` must be greater than zero",
+ "type": "boolean",
+ "value": "false",
+ "isFunction": false,
+ "constant": false,
+ "reactive": true
+ },
+ {
+ "name": "x",
+ "kind": "let",
+ "description": "Specify the horizontal offset of the menu position",
+ "type": "number",
+ "value": "0",
+ "isFunction": false,
+ "constant": false,
+ "reactive": true
+ },
+ {
+ "name": "y",
+ "kind": "let",
+ "description": "Specify the vertical offset of the menu position",
+ "type": "number",
+ "value": "0",
+ "isFunction": false,
+ "constant": false,
+ "reactive": true
+ },
+ {
+ "name": "ref",
+ "kind": "let",
+ "description": "Obtain a reference to the unordered list HTML element",
+ "type": "null | HTMLUListElement",
+ "value": "null",
+ "isFunction": false,
+ "constant": false,
+ "reactive": true
+ }
+ ],
+ "slots": [{ "name": "__default__", "default": true, "slot_props": "{}" }],
+ "events": [
+ { "type": "forwarded", "name": "click", "element": "ul" },
+ { "type": "forwarded", "name": "keydown", "element": "ul" },
+ { "type": "dispatched", "name": "close" }
+ ],
+ "typedefs": [],
+ "rest_props": { "type": "Element", "name": "ul" }
+ },
+ {
+ "moduleName": "ContextMenuDivider",
+ "filePath": "src/ContextMenu/ContextMenuDivider.svelte",
+ "props": [],
+ "slots": [],
+ "events": [],
+ "typedefs": []
+ },
+ {
+ "moduleName": "ContextMenuGroup",
+ "filePath": "src/ContextMenu/ContextMenuGroup.svelte",
+ "props": [
+ {
+ "name": "selectedIds",
+ "kind": "let",
+ "type": "string[]",
+ "value": "[]",
+ "isFunction": false,
+ "constant": false,
+ "reactive": true
+ },
+ {
+ "name": "labelText",
+ "kind": "let",
+ "description": "Specify the label text",
+ "type": "string",
+ "value": "\"\"",
+ "isFunction": false,
+ "constant": false,
+ "reactive": false
+ }
+ ],
+ "slots": [{ "name": "__default__", "default": true, "slot_props": "{}" }],
+ "events": [],
+ "typedefs": []
+ },
+ {
+ "moduleName": "ContextMenuOption",
+ "filePath": "src/ContextMenu/ContextMenuOption.svelte",
+ "props": [
+ {
+ "name": "disabled",
+ "kind": "let",
+ "description": "Set to `true` to enable the disabled state",
+ "type": "boolean",
+ "value": "false",
+ "isFunction": false,
+ "constant": false,
+ "reactive": false
+ },
+ {
+ "name": "indented",
+ "kind": "let",
+ "description": "Set to `true` to indent the label",
+ "type": "boolean",
+ "value": "false",
+ "isFunction": false,
+ "constant": false,
+ "reactive": true
+ },
+ {
+ "name": "icon",
+ "kind": "let",
+ "description": "Specify the icon from `carbon-icons-svelte` to render\nIcon is rendered to the left of the label text",
+ "type": "typeof import(\"carbon-icons-svelte\").CarbonIcon",
+ "isFunction": false,
+ "constant": false,
+ "reactive": true
+ },
+ {
+ "name": "labelText",
+ "kind": "let",
+ "description": "Specify the label text\nAlternatively, use the \"labelText\" slot (e.g., ...)",
+ "type": "string",
+ "value": "\"\"",
+ "isFunction": false,
+ "constant": false,
+ "reactive": false
+ },
+ {
+ "name": "selected",
+ "kind": "let",
+ "description": "Set to `true` to use the selected variant",
+ "type": "boolean",
+ "value": "false",
+ "isFunction": false,
+ "constant": false,
+ "reactive": true
+ },
+ {
+ "name": "selectable",
+ "kind": "let",
+ "description": "Set to `true` to enable the selectable variant\nAutomatically set to `true` if `selected` is `true`",
+ "type": "boolean",
+ "value": "false",
+ "isFunction": false,
+ "constant": false,
+ "reactive": true
+ },
+ {
+ "name": "shortcutText",
+ "kind": "let",
+ "description": "Specify the shortcut text\nAlternatively, use the \"shortcutText\" slot (e.g., ...)",
+ "type": "string",
+ "value": "\"\"",
+ "isFunction": false,
+ "constant": false,
+ "reactive": false
+ },
+ {
+ "name": "id",
+ "kind": "let",
+ "description": "Specify the id\nIt's highly recommended to provide an id when using in a selectable/radio menu group",
+ "type": "string",
+ "value": "\"ccs-\" + Math.random().toString(36)",
+ "isFunction": false,
+ "constant": false,
+ "reactive": false
+ },
+ {
+ "name": "ref",
+ "kind": "let",
+ "description": "Obtain a reference to the list item HTML element",
+ "type": "null | HTMLLIElement",
+ "value": "null",
+ "isFunction": false,
+ "constant": false,
+ "reactive": true
+ }
+ ],
+ "slots": [
+ { "name": "__default__", "default": true, "slot_props": "{}" },
+ {
+ "name": "labelText",
+ "default": false,
+ "fallback": "{labelText}",
+ "slot_props": "{}"
+ },
+ {
+ "name": "shortcutText",
+ "default": false,
+ "fallback": "{shortcutText}",
+ "slot_props": "{}"
+ }
+ ],
+ "events": [
+ { "type": "forwarded", "name": "keydown", "element": "li" },
+ { "type": "forwarded", "name": "mouseenter", "element": "li" },
+ { "type": "forwarded", "name": "mouseleave", "element": "li" },
+ { "type": "dispatched", "name": "click" }
+ ],
+ "typedefs": [],
+ "rest_props": { "type": "Element", "name": "li" }
+ },
+ {
+ "moduleName": "ContextMenuRadioGroup",
+ "filePath": "src/ContextMenu/ContextMenuRadioGroup.svelte",
+ "props": [
+ {
+ "name": "selectedId",
+ "kind": "let",
+ "description": "Set the selected radio group id",
+ "type": "string",
+ "value": "\"\"",
+ "isFunction": false,
+ "constant": false,
+ "reactive": true
+ },
+ {
+ "name": "labelText",
+ "kind": "let",
+ "description": "Specify the label text",
+ "type": "string",
+ "value": "\"\"",
+ "isFunction": false,
+ "constant": false,
+ "reactive": false
+ }
+ ],
+ "slots": [{ "name": "__default__", "default": true, "slot_props": "{}" }],
+ "events": [],
+ "typedefs": []
+ },
{
"moduleName": "Copy",
"filePath": "src/Copy/Copy.svelte",
diff --git a/src/ContextMenu/ContextMenuGroup.svelte b/src/ContextMenu/ContextMenuGroup.svelte
index 68781d1f..2ae256c7 100644
--- a/src/ContextMenu/ContextMenuGroup.svelte
+++ b/src/ContextMenu/ContextMenuGroup.svelte
@@ -2,7 +2,8 @@
/** @type {string[]} */
export let selectedIds = [];
- export let label = "";
+ /** Specify the label text */
+ export let labelText = "";
import { setContext } from "svelte";
import { writable } from "svelte/store";
@@ -29,7 +30,7 @@