@hashicorp/design-system-components 4.24.0 → 4.24.1-rc-20251103142501

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/declarations/components/hds/code-block/copy-button.d.ts +1 -0
  2. package/declarations/components/hds/code-block/index.d.ts +1 -0
  3. package/declarations/components/hds/copy/button/index.d.ts +4 -0
  4. package/declarations/components/hds/flyout/index.d.ts +1 -18
  5. package/declarations/components/hds/modal/index.d.ts +2 -2
  6. package/declarations/components/hds/theme-switcher/index.d.ts +41 -0
  7. package/declarations/components.d.ts +1 -0
  8. package/declarations/services/hds-theming.d.ts +68 -0
  9. package/declarations/services.d.ts +1 -0
  10. package/declarations/template-registry.d.ts +3 -0
  11. package/dist/_app_/components/hds/theme-switcher.js +1 -0
  12. package/dist/_app_/services/hds-theming.js +1 -0
  13. package/dist/components/hds/app-footer/copyright.js +1 -1
  14. package/dist/components/hds/code-block/copy-button.js +1 -1
  15. package/dist/components/hds/code-block/copy-button.js.map +1 -1
  16. package/dist/components/hds/code-block/index.js +1 -1
  17. package/dist/components/hds/code-block/index.js.map +1 -1
  18. package/dist/components/hds/copy/button/index.js +15 -1
  19. package/dist/components/hds/copy/button/index.js.map +1 -1
  20. package/dist/components/hds/dialog-primitive/body.js +1 -1
  21. package/dist/components/hds/flyout/index.js +31 -54
  22. package/dist/components/hds/flyout/index.js.map +1 -1
  23. package/dist/components/hds/modal/index.js +48 -35
  24. package/dist/components/hds/modal/index.js.map +1 -1
  25. package/dist/components/hds/theme-switcher/index.js +86 -0
  26. package/dist/components/hds/theme-switcher/index.js.map +1 -0
  27. package/dist/components.js +1 -0
  28. package/dist/components.js.map +1 -1
  29. package/dist/services/hds-theming.js +204 -0
  30. package/dist/services/hds-theming.js.map +1 -0
  31. package/dist/services.js +1 -1
  32. package/dist/styles/@hashicorp/design-system-components-common.css +9823 -0
  33. package/dist/styles/@hashicorp/design-system-components-common.css.map +1 -0
  34. package/dist/styles/@hashicorp/design-system-components-common.scss +20 -0
  35. package/dist/styles/@hashicorp/design-system-components.css +32 -18
  36. package/dist/styles/@hashicorp/design-system-components.css.map +1 -0
  37. package/dist/styles/@hashicorp/design-system-components.scss +4 -59
  38. package/dist/styles/@hashicorp/design-system-power-select-overrides.css +229 -0
  39. package/dist/styles/@hashicorp/design-system-power-select-overrides.css.map +1 -0
  40. package/dist/styles/components/app-footer.scss +3 -0
  41. package/dist/styles/components/form/file-input.scss +1 -0
  42. package/dist/styles/components/index.scss +52 -0
  43. package/package.json +9 -4
  44. package/translations/hds/components/app-footer/copyright/en-us.yaml +1 -1
  45. package/translations/hds/components/copy-button/en-us.yaml +1 -0
  46. package/dist/styles/@hashicorp/design-system-components.scss.map +0 -1
@@ -9,6 +9,7 @@ export interface HdsCodeBlockCopyButtonSignature {
9
9
  targetToCopy?: HdsCopyButtonSignature['Args']['targetToCopy'];
10
10
  text?: HdsCopyButtonSignature['Args']['text'];
11
11
  onCopy?: HdsCopyButtonSignature['Args']['onSuccess'];
12
+ copySuccessMessageText?: HdsCopyButtonSignature['Args']['ariaMessageText'];
12
13
  };
13
14
  Blocks: {
14
15
  default: [];
@@ -39,6 +39,7 @@ export interface HdsCodeBlockSignature {
39
39
  value: string;
40
40
  copyButtonText?: HdsCopyButtonSignature['Args']['text'];
41
41
  onCopy?: HdsCopyButtonSignature['Args']['onSuccess'];
42
+ copySuccessMessageText?: HdsCopyButtonSignature['Args']['ariaMessageText'];
42
43
  };
43
44
  Blocks: {
44
45
  default: [
@@ -8,6 +8,7 @@ import type { HdsCopyButtonSizes } from './types.ts';
8
8
  import type { HdsButtonSignature } from '../../button/';
9
9
  import type { HdsClipboardModifierSignature } from '../../../../modifiers/hds-clipboard.ts';
10
10
  import type { HdsIconSignature } from '../../icon';
11
+ import type HdsIntlService from '../../../../services/hds-intl';
11
12
  export declare const DEFAULT_SIZE = HdsCopyButtonSizeValues.Medium;
12
13
  export declare const SIZES: HdsCopyButtonSizes[];
13
14
  export declare const DEFAULT_ICON = "clipboard-copy";
@@ -21,10 +22,12 @@ export interface HdsCopyButtonSignature {
21
22
  targetToCopy?: HdsClipboardModifierSignature['Args']['Named']['target'];
22
23
  onSuccess?: HdsClipboardModifierSignature['Args']['Named']['onSuccess'];
23
24
  onError?: HdsClipboardModifierSignature['Args']['Named']['onError'];
25
+ ariaMessageText?: string;
24
26
  };
25
27
  Element: HdsButtonSignature['Element'];
26
28
  }
27
29
  export default class HdsCopyButton extends Component<HdsCopyButtonSignature> {
30
+ hdsIntl: HdsIntlService;
28
31
  private _status;
29
32
  private _timer;
30
33
  /**
@@ -46,6 +49,7 @@ export default class HdsCopyButton extends Component<HdsCopyButtonSignature> {
46
49
  * @return {string} The "class" attribute to apply to the component.
47
50
  */
48
51
  get classNames(): string;
52
+ get ariaMessageText(): string;
49
53
  onSuccess(args: HdsClipboardModifierSignature['Args']['Named']['onSuccess']): void;
50
54
  onError(args: HdsClipboardModifierSignature['Args']['Named']['onError']): void;
51
55
  resetStatusDelayed(): void;
@@ -37,28 +37,11 @@ export default class HdsFlyout extends Component<HdsFlyoutSignature> {
37
37
  _element: HTMLDialogElement;
38
38
  private _body;
39
39
  private _bodyInitialOverflowValue;
40
- /**
41
- * Sets the size of the flyout
42
- * Accepted values: medium, large
43
- *
44
- * @param size
45
- * @type {string}
46
- * @default 'medium'
47
- */
48
40
  get size(): HdsFlyoutSizes;
49
- /**
50
- * Calculates the unique ID to assign to the title
51
- */
52
41
  get id(): string;
53
- /**
54
- * Get the class names to apply to the component.
55
- * @method classNames
56
- * @return {string} The "class" attribute to apply to the component.
57
- */
58
42
  get classNames(): string;
59
43
  registerOnCloseCallback(event: Event): void;
60
- didInsert(element: HTMLDialogElement): void;
61
- willDestroyNode(): void;
44
+ private _registerDialog;
62
45
  open(): void;
63
46
  onDismiss(): Promise<void>;
64
47
  }
@@ -38,14 +38,14 @@ export default class HdsModal extends Component<HdsModalSignature> {
38
38
  private _element;
39
39
  private _body;
40
40
  private _bodyInitialOverflowValue;
41
+ private _clickOutsideToDismissHandler;
41
42
  get isDismissDisabled(): boolean;
42
43
  get size(): HdsModalSizes;
43
44
  get color(): HdsModalColors;
44
45
  get id(): string;
45
46
  get classNames(): string;
46
47
  registerOnCloseCallback(event: Event): void;
47
- didInsert(element: HTMLDialogElement): void;
48
- willDestroyNode(): void;
48
+ private _registerDialog;
49
49
  open(): void;
50
50
  onDismiss(): Promise<void>;
51
51
  }
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Copyright (c) HashiCorp, Inc.
3
+ * SPDX-License-Identifier: MPL-2.0
4
+ */
5
+ import Component from '@glimmer/component';
6
+ import type { HdsDropdownSignature } from '../dropdown/index.ts';
7
+ import type { HdsDropdownToggleButtonSignature } from '../dropdown/toggle/button.ts';
8
+ import type { HdsIconSignature } from '../icon/index.ts';
9
+ import type HdsThemingService from '../../../services/hds-theming.ts';
10
+ import type { HdsThemes, OnSetThemeCallback } from '../../../services/hds-theming.ts';
11
+ interface ThemeOption {
12
+ theme: HdsThemes | undefined;
13
+ icon: HdsIconSignature['Args']['name'];
14
+ label: string;
15
+ }
16
+ interface HdsThemeSwitcherSignature {
17
+ Args: {
18
+ toggleSize?: HdsDropdownToggleButtonSignature['Args']['size'];
19
+ toggleIsFullWidth?: HdsDropdownToggleButtonSignature['Args']['isFullWidth'];
20
+ hasSystemOption?: boolean;
21
+ onSetTheme?: OnSetThemeCallback;
22
+ };
23
+ Element: HdsDropdownSignature['Element'];
24
+ }
25
+ export default class HdsThemeSwitcher extends Component<HdsThemeSwitcherSignature> {
26
+ readonly hdsTheming: HdsThemingService;
27
+ get toggleSize(): "small" | "medium";
28
+ get toggleIsFullWidth(): boolean;
29
+ get toggleContent(): {
30
+ label: string;
31
+ icon: "type" | "map" | "filter" | "code" | "link" | "menu" | "search" | "video" | "circle" | "image" | "path" | "tag" | "repeat" | "hash" | "queue" | "shuffle" | "chevron-up" | "chevron-down" | "unfold-open" | "unfold-close" | "arrow-down" | "arrow-up" | "swap-vertical" | "top" | "key" | "move" | "change" | "pause" | "play" | "move-horizontal" | "loading" | "loading-static" | "running" | "running-static" | "apple" | "apple-color" | "alibaba" | "alibaba-color" | "amazon-ecs" | "amazon-ecs-color" | "amazon-eks" | "amazon-eks-color" | "auth0" | "auth0-color" | "aws" | "aws-color" | "aws-cdk" | "aws-cdk-color" | "aws-cloudwatch" | "aws-cloudwatch-color" | "aws-ec2" | "aws-ec2-color" | "aws-lambda" | "aws-lambda-color" | "aws-s3" | "aws-s3-color" | "azure" | "azure-color" | "azure-aks" | "azure-aks-color" | "azure-blob-storage" | "azure-blob-storage-color" | "azure-devops" | "azure-devops-color" | "azure-vms" | "azure-vms-color" | "bitbucket" | "bitbucket-color" | "bridgecrew" | "bridgecrew-color" | "cisco" | "cisco-color" | "codepen" | "codepen-color" | "confluence" | "confluence-color" | "confluent" | "confluent-color" | "datadog" | "datadog-color" | "digital-ocean" | "digital-ocean-color" | "docker" | "docker-color" | "duo" | "duo-color" | "elastic-observability" | "elastic-observability-color" | "f5" | "f5-color" | "facebook" | "facebook-color" | "figma" | "figma-color" | "gcp" | "gcp-color" | "git" | "git-color" | "gitlab" | "gitlab-color" | "github" | "github-color" | "google" | "google-color" | "google-docs" | "google-docs-color" | "google-drive" | "google-drive-color" | "google-forms" | "google-forms-color" | "google-sheets" | "google-sheets-color" | "google-slides" | "google-slides-color" | "grafana" | "grafana-color" | "helm" | "helm-color" | "infracost" | "infracost-color" | "jfrog" | "jfrog-color" | "jira" | "jira-color" | "jwt" | "jwt-color" | "kubernetes" | "kubernetes-color" | "lightlytics" | "lightlytics-color" | "linkedin" | "linkedin-color" | "linode" | "linode-color" | "linux" | "linux-color" | "loom" | "loom-color" | "meetup" | "meetup-color" | "microsoft" | "microsoft-color" | "microsoft-teams" | "microsoft-teams-color" | "minio" | "minio-color" | "mongodb" | "mongodb-color" | "new-relic" | "new-relic-color" | "okta" | "okta-color" | "oracle" | "oracle-color" | "opa" | "opa-color" | "openid" | "openid-color" | "pack" | "pack-color" | "pager-duty" | "pager-duty-color" | "ping-identity " | "ping-identity-color" | "postgres" | "postgres-color" | "rabbitmq" | "rabbitmq-color" | "saml" | "saml-color" | "service-now" | "service-now-color" | "slack" | "slack-color" | "snyk" | "snyk-color" | "splunk" | "splunk-color" | "twilio" | "twilio-color" | "twitch" | "twitch-color" | "twitter" | "twitter-color" | "twitter-x" | "twitter-x-color" | "vantage" | "vantage-color" | "venafi" | "venafi-color" | "vercel" | "vercel-color" | "vmware" | "vmware-color" | "youtube" | "youtube-color" | "boundary" | "boundary-color" | "boundary-fill" | "boundary-fill-color" | "boundary-square" | "boundary-square-color" | "consul" | "consul-color" | "consul-fill" | "consul-fill-color" | "consul-square" | "consul-square-color" | "nomad" | "nomad-color" | "nomad-fill" | "nomad-fill-color" | "nomad-square" | "nomad-square-color" | "packer" | "packer-color" | "packer-fill" | "packer-fill-color" | "packer-square" | "packer-square-color" | "terraform" | "terraform-color" | "terraform-fill" | "terraform-fill-color" | "terraform-square" | "terraform-square-color" | "vagrant" | "vagrant-color" | "vagrant-fill" | "vagrant-fill-color" | "vagrant-square" | "vagrant-square-color" | "vault" | "vault-color" | "vault-fill" | "vault-fill-color" | "vault-square" | "vault-square-color" | "vault-radar" | "vault-radar-color" | "vault-radar-fill" | "vault-radar-fill-color" | "vault-radar-square" | "vault-radar-square-color" | "vault-secrets" | "vault-secrets-color" | "vault-secrets-fill" | "vault-secrets-fill-color" | "vault-secrets-square" | "vault-secrets-square-color" | "waypoint" | "waypoint-color" | "waypoint-fill" | "waypoint-fill-color" | "waypoint-square" | "waypoint-square-color" | "hashicorp" | "hashicorp-color" | "hashicorp-fill" | "hashicorp-fill-color" | "hashicorp-square" | "hashicorp-square-color" | "hcp" | "hcp-color" | "hcp-fill" | "hcp-fill-color" | "hcp-square" | "hcp-square-color" | "accessibility" | "folder-users" | "frown" | "identity-service" | "identity-user" | "meh" | "robot" | "smile" | "user" | "user-check" | "user-circle" | "user-circle-fill" | "user-minus" | "user-plus" | "user-x" | "users" | "ampersand" | "beaker" | "bucket" | "bulb" | "circle-dot" | "circle-fill" | "circle-half" | "diamond" | "diamond-fill" | "disc" | "dot" | "dot-half" | "droplet" | "flag" | "gift" | "government" | "handshake" | "hexagon" | "hexagon-fill" | "labyrinth" | "layers" | "moon" | "octagon" | "outline" | "random" | "rocket" | "sparkle" | "square" | "square-fill" | "sun" | "triangle" | "triangle-fill" | "truck" | "wand" | "zap" | "zap-off" | "docs" | "docs-download" | "docs-link" | "guide" | "guide-link" | "help" | "info" | "info-fill" | "learn" | "learn-link" | "support" | "alert-circle" | "alert-circle-fill" | "alert-diamond" | "alert-diamond-fill" | "alert-octagon" | "alert-octagon-fill" | "alert-triangle" | "alert-triangle-fill" | "check" | "check-circle" | "check-circle-fill" | "check-diamond" | "check-diamond-fill" | "check-hexagon" | "check-hexagon-fill" | "check-square" | "check-square-fill" | "skip" | "x" | "x-circle" | "x-circle-fill" | "x-diamond" | "x-diamond-fill" | "x-hexagon" | "x-hexagon-fill" | "x-square" | "x-square-fill" | "bug" | "certificate" | "eye" | "eye-off" | "fingerprint" | "keychain" | "lock" | "lock-fill" | "lock-off" | "shield" | "shield-alert" | "shield-check" | "shield-off" | "shield-x" | "token" | "unlock" | "verified" | "wall" | "minus" | "minus-circle" | "minus-circle-fill" | "minus-plus" | "minus-plus-circle" | "minus-plus-square" | "minus-square" | "minus-square-fill" | "plus" | "plus-circle" | "plus-circle-fill" | "plus-square" | "camera" | "camera-off" | "cast" | "closed-caption" | "fast-forward" | "film" | "headphones" | "music" | "pause-circle" | "play-circle" | "radio" | "rewind" | "rss" | "skip-back" | "skip-forward" | "speaker" | "stop-circle" | "volume" | "volume-down" | "volume-2" | "volume-x" | "wifi" | "wifi-off" | "compass" | "crosshair" | "map-pin" | "navigation" | "navigation-alt" | "redirect" | "target" | "align-center" | "align-justify" | "align-left" | "align-right" | "battery" | "battery-charging" | "bookmark" | "bookmark-add" | "bookmark-add-fill" | "bookmark-fill" | "bookmark-remove" | "bookmark-remove-fill" | "bottom" | "start" | "end" | "command" | "crop" | "dashboard" | "delete" | "download" | "edit" | "entry-point" | "exit-point" | "external-link" | "filter-circle" | "filter-fill" | "grid" | "grid-alt" | "home" | "jump-link" | "layout" | "list" | "maximize" | "maximize-alt" | "minimize" | "minimize-alt" | "more-horizontal" | "more-vertical" | "mouse-pointer" | "paperclip" | "pen-tool" | "pencil-tool" | "pin" | "pin-off" | "power" | "printer" | "reload" | "resize-column" | "rotate-cw" | "rotate-ccw" | "share" | "sidebar" | "sidebar-hide" | "sidebar-show" | "sign-in" | "sign-out" | "slash" | "slash-square" | "sort-asc" | "sort-desc" | "switcher" | "sync" | "sync-alert" | "sync-reverse" | "toggle-left" | "toggle-right" | "trash" | "text-wrap" | "upload" | "zoom-in" | "zoom-out" | "archive" | "clipboard" | "clipboard-checked" | "clipboard-copy" | "clipboard-x" | "file" | "file-change" | "file-check" | "file-diff" | "file-minus" | "file-plus" | "file-source" | "file-text" | "file-x" | "files" | "folder" | "folder-fill" | "folder-minus" | "folder-minus-fill" | "folder-plus" | "folder-plus-fill" | "folder-star" | "inbox" | "api" | "auto-apply" | "build" | "change-circle" | "change-square" | "channel" | "cloud" | "cloud-check" | "cloud-download" | "cloud-lightning" | "cloud-lock" | "cloud-off" | "cloud-upload" | "cloud-x" | "connection" | "connection-gateway" | "cpu" | "duplicate" | "gateway" | "git-branch" | "git-commit" | "git-merge" | "git-pull-request" | "git-repo" | "hammer" | "key-values" | "mainframe" | "mesh" | "module" | "monitor" | "network" | "network-alt" | "node" | "pipeline" | "plug" | "replication-direct" | "replication-perf" | "scissors" | "server" | "server-cluster" | "serverless" | "service" | "settings" | "sliders" | "smartphone" | "socket" | "step" | "tablet" | "terminal" | "terminal-screen" | "test" | "tools" | "transform-data" | "tv" | "webhook" | "wrench" | "calendar" | "clock" | "clock-filled" | "delay" | "event" | "history" | "hourglass" | "watch" | "bar-chart" | "bar-chart-alt" | "box" | "collections" | "database" | "hard-drive" | "line-chart" | "line-chart-up" | "logs" | "package" | "pie-chart" | "save" | "trend-down" | "trend-up" | "activity" | "at-sign" | "award" | "bell" | "bell-active" | "bell-active-fill" | "bell-off" | "discussion-circle" | "discussion-square" | "heart" | "heart-fill" | "heart-off" | "mail" | "mail-open" | "message-circle" | "message-circle-fill" | "message-square" | "message-square-fill" | "mic" | "mic-off" | "newspaper" | "phone" | "phone-call" | "phone-off" | "send" | "star" | "star-circle" | "star-fill" | "star-off" | "thumbs-down" | "thumbs-up" | "video-off" | "bank-vault" | "briefcase" | "credit-card" | "dollar-sign" | "enterprise" | "globe" | "globe-private" | "org" | "provider" | "shopping-bag" | "shopping-cart" | "arrow-down-circle" | "arrow-down-left" | "arrow-down-right" | "arrow-left" | "arrow-left-circle" | "arrow-right" | "arrow-right-circle" | "arrow-up-circle" | "arrow-up-left" | "arrow-up-right" | "caret" | "chevron-left" | "chevron-right" | "chevrons-down" | "chevrons-left" | "chevrons-right" | "chevrons-up" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "load-balancer" | "migrate" | "swap-horizontal";
32
+ } | {
33
+ label: string;
34
+ icon: undefined;
35
+ };
36
+ get hasSystemOption(): boolean;
37
+ get _options(): Partial<Record<"light" | "dark" | "system", ThemeOption>>;
38
+ get currentTheme(): "light" | "dark" | "system" | undefined;
39
+ onSelectTheme(theme: HdsThemes | undefined): void;
40
+ }
41
+ export {};
@@ -223,6 +223,7 @@ export { default as HdsTextBody } from './components/hds/text/body.ts';
223
223
  export { default as HdsTextCode } from './components/hds/text/code.ts';
224
224
  export { default as HdsTextDisplay } from './components/hds/text/display.ts';
225
225
  export * from './components/hds/text/types.ts';
226
+ export { default as HdsThemeSwitcher } from './components/hds/theme-switcher/index.ts';
226
227
  export { default as HdsTime } from './components/hds/time/index.ts';
227
228
  export { default as HdsTimeSingle } from './components/hds/time/single.ts';
228
229
  export { default as HdsTimeRange } from './components/hds/time/range.ts';
@@ -0,0 +1,68 @@
1
+ import Service from '@ember/service';
2
+ export declare enum HdsThemeValues {
3
+ System = "system",
4
+ Light = "light",
5
+ Dark = "dark"
6
+ }
7
+ declare enum HdsModesBaseValues {
8
+ Hds = "hds"
9
+ }
10
+ declare enum HdsModesLightValues {
11
+ CdsG0 = "cds-g0",
12
+ CdsG10 = "cds-g10"
13
+ }
14
+ declare enum HdsModesDarkValues {
15
+ CdsG90 = "cds-g90",
16
+ CdsG100 = "cds-g100"
17
+ }
18
+ export declare enum HdsCssSelectorsValues {
19
+ Data = "data",
20
+ Class = "class"
21
+ }
22
+ export type HdsThemes = `${HdsThemeValues}`;
23
+ export type HdsModes = `${HdsModesBaseValues}` | `${HdsModesLightValues}` | `${HdsModesDarkValues}`;
24
+ export type HdsModesLight = `${HdsModesLightValues}`;
25
+ export type HdsModesDark = `${HdsModesDarkValues}`;
26
+ export type HdsCssSelectors = `${HdsCssSelectorsValues}`;
27
+ type HdsThemingOptions = {
28
+ lightTheme: HdsModesLight;
29
+ darkTheme: HdsModesDark;
30
+ cssSelector: HdsCssSelectors;
31
+ };
32
+ type SetThemeArgs = {
33
+ theme: HdsThemes | undefined;
34
+ options?: HdsThemingOptions;
35
+ onSetTheme?: OnSetThemeCallback;
36
+ };
37
+ export type OnSetThemeCallbackArgs = {
38
+ currentTheme: HdsThemes | undefined;
39
+ currentMode: HdsModes | undefined;
40
+ };
41
+ export type OnSetThemeCallback = (args: OnSetThemeCallbackArgs) => void;
42
+ export declare const THEMES: HdsThemes[];
43
+ export declare const MODES_LIGHT: HdsModesLight[];
44
+ export declare const MODES_DARK: HdsModesDark[];
45
+ export declare const MODES: HdsModes[];
46
+ export declare const HDS_THEMING_DATA_SELECTOR = "data-hds-theme";
47
+ export declare const HDS_THEMING_CLASS_SELECTOR_PREFIX = "hds-theme";
48
+ export declare const HDS_THEMING_CLASS_SELECTORS_LIST: string[];
49
+ export declare const HDS_THEMING_LOCALSTORAGE_DATA = "hds-theming-data";
50
+ export declare const DEFAULT_THEMING_OPTION_LIGHT_THEME = HdsModesLightValues.CdsG0;
51
+ export declare const DEFAULT_THEMING_OPTION_DARK_THEME = HdsModesDarkValues.CdsG100;
52
+ export declare const DEFAULT_THEMING_OPTION_CSS_SELECTOR = "data";
53
+ export default class HdsThemingService extends Service {
54
+ _currentTheme: HdsThemes | undefined;
55
+ _currentMode: HdsModes | undefined;
56
+ _currentLightTheme: HdsModesLight;
57
+ _currentDarkTheme: HdsModesDark;
58
+ _currentCssSelector: HdsCssSelectors;
59
+ globalOnSetTheme: OnSetThemeCallback | undefined;
60
+ initializeTheme(): void;
61
+ setTheme({ theme, options, onSetTheme }: SetThemeArgs): void;
62
+ get currentTheme(): HdsThemes | undefined;
63
+ get currentMode(): HdsModes | undefined;
64
+ get currentLightTheme(): HdsModesLight;
65
+ get currentDarkTheme(): HdsModesDark;
66
+ get currentCssSelector(): HdsCssSelectors;
67
+ }
68
+ export {};
@@ -2,3 +2,4 @@
2
2
  * Copyright (c) HashiCorp, Inc.
3
3
  * SPDX-License-Identifier: MPL-2.0
4
4
  */
5
+ export * from './services/hds-theming.ts';
@@ -226,6 +226,7 @@ import type HdsTagComponent from './components/hds/tag';
226
226
  import type HdsTooltipButtonComponent from './components/hds/tooltip-button';
227
227
  import type HdsToastComponent from './components/hds/toast';
228
228
  import type HdsTextCodeComponent from './components/hds/text/code';
229
+ import type HdsThemeSwitcherComponent from './components/hds/theme-switcher';
229
230
  import type HdsTimeComponent from './components/hds/time';
230
231
  import type HdsTimeSingleComponent from './components/hds/time/single';
231
232
  import type HdsTimeRangeComponent from './components/hds/time/range';
@@ -717,6 +718,8 @@ export default interface HdsComponentsRegistry {
717
718
  'hds/tooltip-button': typeof HdsTooltipButtonComponent;
718
719
  'Hds::Toast': typeof HdsToastComponent;
719
720
  'hds/toast': typeof HdsToastComponent;
721
+ 'Hds::ThemeSwitcher': typeof HdsThemeSwitcherComponent;
722
+ 'hds/theme-switcher': typeof HdsThemeSwitcherComponent;
720
723
  'Hds::Time': typeof HdsTimeComponent;
721
724
  'hds/time': typeof HdsTimeComponent;
722
725
  'Hds::Time::Single': typeof HdsTimeSingleComponent;
@@ -0,0 +1 @@
1
+ export { default } from "@hashicorp/design-system-components/components/hds/theme-switcher/index";
@@ -0,0 +1 @@
1
+ export { default } from "@hashicorp/design-system-components/services/hds-theming";
@@ -2,7 +2,7 @@ import Component from '@glimmer/component';
2
2
  import { precompileTemplate } from '@ember/template-compilation';
3
3
  import { setComponentTemplate } from '@ember/component';
4
4
 
5
- var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n\n<div class=\"hds-app-footer__copyright\" ...attributes>\n <Hds::Icon @name=\"hashicorp\" />\n <Hds::Text::Body @tag=\"span\" @size=\"100\">\n {{hds-t\n \"hds.components.app-footer.copyright.copyright-text\"\n default=(concat \"© \" this.year \" HashiCorp\")\n year=this.year\n }}\n </Hds::Text::Body>\n</div>");
5
+ var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n\n<div class=\"hds-app-footer__copyright\" ...attributes>\n <Hds::Icon @name=\"hashicorp\" />\n <Hds::Text::Body @tag=\"span\" @size=\"100\" @align=\"center\">\n {{hds-t\n \"hds.components.app-footer.copyright.copyright-text\"\n default=(concat \"© \" this.year \" HashiCorp, an IBM Company\")\n year=this.year\n }}\n </Hds::Text::Body>\n</div>");
6
6
 
7
7
  /**
8
8
  * Copyright (c) HashiCorp, Inc.
@@ -2,7 +2,7 @@ import Component from '@glimmer/component';
2
2
  import { precompileTemplate } from '@ember/template-compilation';
3
3
  import { setComponentTemplate } from '@ember/component';
4
4
 
5
- var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n\n<Hds::Copy::Button\n class=\"hds-code-block__copy-button\"\n @text={{this.text}}\n @isIconOnly={{true}}\n @size=\"small\"\n @targetToCopy={{@targetToCopy}}\n @onSuccess={{@onCopy}}\n ...attributes\n/>");
5
+ var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n\n<Hds::Copy::Button\n class=\"hds-code-block__copy-button\"\n @text={{this.text}}\n @isIconOnly={{true}}\n @size=\"small\"\n @targetToCopy={{@targetToCopy}}\n @onSuccess={{@onCopy}}\n @ariaMessageText={{@copySuccessMessageText}}\n ...attributes\n/>");
6
6
 
7
7
  /**
8
8
  * Copyright (c) HashiCorp, Inc.
@@ -1 +1 @@
1
- {"version":3,"file":"copy-button.js","sources":["../../../../src/components/hds/code-block/copy-button.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\n\nimport type { HdsCopyButtonSignature } from '../copy/button';\n\nexport interface HdsCodeBlockCopyButtonSignature {\n Args: {\n targetToCopy?: HdsCopyButtonSignature['Args']['targetToCopy'];\n text?: HdsCopyButtonSignature['Args']['text'];\n onCopy?: HdsCopyButtonSignature['Args']['onSuccess'];\n };\n Blocks: {\n default: [];\n };\n Element: HdsCopyButtonSignature['Element'];\n}\n\nexport default class HdsCodeBlockCopyButton extends Component<HdsCodeBlockCopyButtonSignature> {\n get text(): HdsCopyButtonSignature['Args']['text'] {\n return this.args.text ? this.args.text : 'Copy';\n }\n}\n"],"names":["HdsCodeBlockCopyButton","Component","text","args","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;;AAkBe,MAAMA,sBAAsB,SAASC,SAAS,CAAkC;EAC7F,IAAIC,IAAIA,GAA2C;AACjD,IAAA,OAAO,IAAI,CAACC,IAAI,CAACD,IAAI,GAAG,IAAI,CAACC,IAAI,CAACD,IAAI,GAAG,MAAM;AACjD,EAAA;AACF;AAACE,oBAAA,CAAAC,QAAA,EAJoBL,sBAAsB,CAAA;;;;"}
1
+ {"version":3,"file":"copy-button.js","sources":["../../../../src/components/hds/code-block/copy-button.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\n\nimport type { HdsCopyButtonSignature } from '../copy/button';\n\nexport interface HdsCodeBlockCopyButtonSignature {\n Args: {\n targetToCopy?: HdsCopyButtonSignature['Args']['targetToCopy'];\n text?: HdsCopyButtonSignature['Args']['text'];\n onCopy?: HdsCopyButtonSignature['Args']['onSuccess'];\n copySuccessMessageText?: HdsCopyButtonSignature['Args']['ariaMessageText'];\n };\n Blocks: {\n default: [];\n };\n Element: HdsCopyButtonSignature['Element'];\n}\n\nexport default class HdsCodeBlockCopyButton extends Component<HdsCodeBlockCopyButtonSignature> {\n get text(): HdsCopyButtonSignature['Args']['text'] {\n return this.args.text ? this.args.text : 'Copy';\n }\n}\n"],"names":["HdsCodeBlockCopyButton","Component","text","args","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;;AAmBe,MAAMA,sBAAsB,SAASC,SAAS,CAAkC;EAC7F,IAAIC,IAAIA,GAA2C;AACjD,IAAA,OAAO,IAAI,CAACC,IAAI,CAACD,IAAI,GAAG,IAAI,CAACC,IAAI,CAACD,IAAI,GAAG,MAAM;AACjD,EAAA;AACF;AAACE,oBAAA,CAAAC,QAAA,EAJoBL,sBAAsB,CAAA;;;;"}
@@ -26,7 +26,7 @@ import { precompileTemplate } from '@ember/template-compilation';
26
26
  import { g, i, n } from 'decorator-transforms/runtime';
27
27
  import { setComponentTemplate } from '@ember/component';
28
28
 
29
- var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n\n<div class={{this.classNames}} ...attributes {{this._setUpCodeObserver}}>\n <div class=\"hds-code-block__header\">\n {{~yield (hash Title=(component \"hds/code-block/title\" didInsertNode=this.registerTitleElement))~}}\n {{~yield\n (hash Description=(component \"hds/code-block/description\" didInsertNode=this.registerDescriptionElement))\n ~}}\n </div>\n <div class=\"hds-code-block__body\">\n {{! content within pre tag is whitespace-sensitive; do not add new lines! }}\n <pre\n class=\"hds-code-block__code\"\n {{style maxHeight=this.maxHeight}}\n data-line={{@highlightLines}}\n data-start={{@lineNumberStart}}\n id={{this._preCodeId}}\n aria-label={{@ariaLabel}}\n aria-labelledby={{this.ariaLabelledBy}}\n aria-describedby={{this.ariaDescribedBy}}\n tabindex=\"0\"\n ><code {{this._setUpCodeBlockCode}}>\n {{~this._prismCode~}}\n </code></pre>\n\n {{#if @hasCopyButton}}\n <Hds::CodeBlock::CopyButton\n @targetToCopy=\"#{{this._preCodeId}}\"\n aria-describedby={{this._preCodeId}}\n @text={{this.copyButtonText}}\n @onCopy={{@onCopy}}\n />\n {{/if}}\n </div>\n {{#if this.showFooter}}\n <div class=\"hds-code-block__overlay-footer\">\n <Hds::Button\n class=\"hds-code-block__height-toggle-button\"\n @text={{if this._isExpanded \"Show less code\" \"Show more code\"}}\n @color=\"secondary\"\n @icon={{if this._isExpanded \"unfold-close\" \"unfold-open\"}}\n @size=\"small\"\n {{on \"click\" this.toggleExpanded}}\n />\n </div>\n {{/if}}\n</div>");
29
+ var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n\n<div class={{this.classNames}} ...attributes {{this._setUpCodeObserver}}>\n <div class=\"hds-code-block__header\">\n {{~yield (hash Title=(component \"hds/code-block/title\" didInsertNode=this.registerTitleElement))~}}\n {{~yield\n (hash Description=(component \"hds/code-block/description\" didInsertNode=this.registerDescriptionElement))\n ~}}\n </div>\n <div class=\"hds-code-block__body\">\n {{! content within pre tag is whitespace-sensitive; do not add new lines! }}\n <pre\n class=\"hds-code-block__code\"\n {{style maxHeight=this.maxHeight}}\n data-line={{@highlightLines}}\n data-start={{@lineNumberStart}}\n id={{this._preCodeId}}\n aria-label={{@ariaLabel}}\n aria-labelledby={{this.ariaLabelledBy}}\n aria-describedby={{this.ariaDescribedBy}}\n tabindex=\"0\"\n ><code {{this._setUpCodeBlockCode}}>\n {{~this._prismCode~}}\n </code></pre>\n\n {{#if @hasCopyButton}}\n <Hds::CodeBlock::CopyButton\n @targetToCopy=\"#{{this._preCodeId}}\"\n aria-describedby={{this._preCodeId}}\n @text={{this.copyButtonText}}\n @onCopy={{@onCopy}}\n @copySuccessMessageText={{@copySuccessMessageText}}\n />\n {{/if}}\n </div>\n {{#if this.showFooter}}\n <div class=\"hds-code-block__overlay-footer\">\n <Hds::Button\n class=\"hds-code-block__height-toggle-button\"\n @text={{if this._isExpanded \"Show less code\" \"Show more code\"}}\n @color=\"secondary\"\n @icon={{if this._isExpanded \"unfold-close\" \"unfold-open\"}}\n @size=\"small\"\n {{on \"click\" this.toggleExpanded}}\n />\n </div>\n {{/if}}\n</div>");
30
30
 
31
31
  /**
32
32
  * Copyright (c) HashiCorp, Inc.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/hds/code-block/index.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { next, schedule } from '@ember/runloop';\nimport { htmlSafe } from '@ember/template';\nimport { guidFor } from '@ember/object/internals';\nimport { modifier } from 'ember-modifier';\n\nimport Prism from 'prismjs';\n\nimport type { SafeString } from '@ember/template';\nimport type { WithBoundArgs } from '@glint/template';\n\nimport type { HdsCodeBlockTitleSignature } from './title';\nimport type { HdsCodeBlockDescriptionSignature } from './description';\nimport { HdsCodeBlockLanguageValues } from './types.ts';\nimport type { HdsCodeBlockLanguages } from './types.ts';\nimport type { HdsCopyButtonSignature } from '../copy/button/index.ts';\n\nimport HdsCodeBlockTitleComponent from './title.ts';\nimport HdsCodeBlockDescriptionComponent from './description.ts';\n\nimport 'prismjs/plugins/line-numbers/prism-line-numbers';\nimport 'prismjs/plugins/line-highlight/prism-line-highlight';\n\nimport 'prismjs/components/prism-bash';\nimport 'prismjs/components/prism-go';\nimport 'prismjs/components/prism-hcl';\nimport 'prismjs/components/prism-json';\nimport 'prismjs/components/prism-log';\nimport 'prismjs/components/prism-ruby';\nimport 'prismjs/components/prism-shell-session';\nimport 'prismjs/components/prism-yaml';\n\n// These imports are required to overcome a global variable clash in Helios website\n// where language import are overriden by the Prism instance in `CodeBlock`\n// Note that `prism-handlebars` is dependant on `prism-markup-templating`\nimport 'prismjs/components/prism-markup-templating';\nimport 'prismjs/components/prism-handlebars';\n\nexport const LANGUAGES: HdsCodeBlockLanguages[] = Object.values(\n HdsCodeBlockLanguageValues\n);\n\nexport interface HdsCodeBlockSignature {\n Args: {\n ariaLabel?: string;\n ariaLabelledBy?: string;\n ariaDescribedBy?: string;\n hasCopyButton?: boolean;\n hasLineNumbers?: boolean;\n hasLineWrapping?: boolean;\n highlightLines?: string;\n lineNumberStart?: number;\n isStandalone?: boolean;\n language?: HdsCodeBlockLanguages;\n maxHeight?: string;\n value: string;\n copyButtonText?: HdsCopyButtonSignature['Args']['text'];\n onCopy?: HdsCopyButtonSignature['Args']['onSuccess'];\n };\n Blocks: {\n default: [\n {\n Title?: WithBoundArgs<\n typeof HdsCodeBlockTitleComponent,\n 'didInsertNode'\n >;\n Description?: WithBoundArgs<\n typeof HdsCodeBlockDescriptionComponent,\n 'didInsertNode'\n >;\n },\n ];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsCodeBlock extends Component<HdsCodeBlockSignature> {\n @tracked private _prismCode: SafeString = htmlSafe('');\n @tracked private _isExpanded: boolean = false;\n @tracked private _codeContentHeight: number = 0;\n @tracked private _codeContainerHeight: number = 0;\n @tracked private _titleId: string | undefined;\n @tracked private _descriptionId: string | undefined;\n\n // Generates a unique ID for the code content\n private _preCodeId = 'pre-code-' + guidFor(this);\n private _preCodeElement!: HTMLPreElement;\n private _observer!: ResizeObserver;\n\n // If a code block is hidden from view, and made visible after load, the Prism code needs to be re-run\n private _setUpCodeObserver = modifier((element: HTMLElement) => {\n this._preCodeElement = element.querySelector(\n '.hds-code-block__code'\n ) as HTMLPreElement;\n this._observer = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.contentBoxSize) {\n this._updateCodeHeights();\n this._updatePrismPlugins();\n }\n });\n });\n this._observer.observe(element);\n\n return () => {\n this._observer.disconnect();\n };\n });\n\n private _setUpCodeBlockCode = modifier((element: HTMLElement) => {\n this._isExpanded = false; // reset expanded state on updates\n this.setPrismCode(element);\n return () => {};\n });\n\n get ariaLabelledBy(): string | undefined {\n if (this.args.ariaLabel !== undefined) {\n return;\n }\n\n return this.args.ariaLabelledBy ?? this._titleId;\n }\n\n get ariaDescribedBy(): string | undefined {\n return this.args.ariaDescribedBy ?? this._descriptionId;\n }\n\n // code text content for the CodeBlock\n get code(): string {\n const code = this.args.value;\n\n assert(\n '@code for \"Hds::CodeBlock\" must have a valid value',\n code !== undefined\n );\n\n if (Prism?.plugins?.['NormalizeWhitespace']) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n return Prism.plugins['NormalizeWhitespace'].normalize(code);\n }\n\n return code;\n }\n\n get maxHeight(): string | undefined {\n return this._isExpanded ? 'none' : this.args.maxHeight;\n }\n\n // Shows overlay footer if maxHeight is set and the pre tag content height is greater than the pre tag height\n get showFooter(): boolean {\n if (this.args.maxHeight) {\n return this._codeContentHeight > this._codeContainerHeight;\n }\n return false;\n }\n\n // Name of coding language used within CodeBlock for syntax highlighting\n get language(): HdsCodeBlockLanguages | undefined {\n return this.args.language ?? undefined;\n }\n\n // Displays line numbers if true\n get hasLineNumbers(): boolean {\n return this.args.hasLineNumbers ?? true;\n }\n\n // Make CodeBlock container corners appear rounded (the standalone variation)\n get isStandalone(): boolean {\n return this.args.isStandalone ?? true;\n }\n\n // Make text content wrap to multiple lines\n get hasLineWrapping(): boolean {\n return this.args.hasLineWrapping ?? false;\n }\n\n get copyButtonText(): HdsCopyButtonSignature['Args']['text'] {\n return this.args.copyButtonText ? this.args.copyButtonText : 'Copy';\n }\n\n @action\n registerTitleElement(element: HdsCodeBlockTitleSignature['Element']): void {\n this._titleId = element.id;\n }\n\n @action\n registerDescriptionElement(\n element: HdsCodeBlockDescriptionSignature['Element']\n ): void {\n this._descriptionId = element.id;\n }\n\n @action\n setPrismCode(element: HTMLElement): void {\n const code = this.code;\n const language = this.language;\n const grammar = language ? Prism.languages[language] : undefined;\n\n if (code) {\n // eslint-disable-next-line ember/no-runloop\n next((): void => {\n if (language && grammar) {\n this._prismCode = htmlSafe(Prism.highlight(code, grammar, language));\n } else {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n this._prismCode = htmlSafe(Prism.util.encode(code).toString());\n }\n\n // Existing line numbers must be removed in order to be updated correctly\n const lineNumbers = element.querySelector(\n '.line-numbers-rows'\n ) as HTMLElement;\n if (lineNumbers) {\n element.removeChild(lineNumbers);\n }\n\n if (this.args.highlightLines) {\n this._prismCode = this._addHighlightSrOnlyText(\n this._prismCode.toString()\n );\n }\n\n // Force prism-line-numbers plugin initialization, required for Prism.highlight usage\n // See https://github.com/PrismJS/prism/issues/1234\n Prism.hooks.run('complete', {\n code,\n element,\n });\n\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this._updateCodeHeights();\n // we need to delay re-evaluating the context for prism plugins for as much as possible, and `afterRender` is the 'latest' we can use in the component lifecycle\n this._updatePrismPlugins();\n });\n });\n }\n }\n\n private _updateCodeHeights(): void {\n if (!this._isExpanded) {\n // Get the actual height & the content height of the preCodeElement\n this._codeContentHeight = this._preCodeElement?.scrollHeight ?? 0;\n this._codeContainerHeight = this._preCodeElement?.clientHeight ?? 0;\n }\n }\n\n private _updatePrismPlugins(): void {\n if (this.hasLineNumbers && Prism?.plugins?.['lineNumbers']) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n Prism.plugins['lineNumbers'].resize(this._preCodeElement);\n }\n\n // Force prism-line-highlight plugin initialization\n // Context: https://github.com/hashicorp/design-system/pull/1749#discussion_r1374288785\n if (this.args.highlightLines) {\n // we piggy-back on the plugin's `resize` event listener to trigger a new call of the `highlightLines` function: https://github.com/PrismJS/prism/blob/master/plugins/line-highlight/prism-line-highlight.js#L337\n if (window) window.dispatchEvent(new Event('resize'));\n }\n }\n\n @action\n toggleExpanded(): void {\n this._isExpanded = !this._isExpanded;\n }\n\n // Logic for determining where line highlighting starts and ends taken from Prism.js plugin source code\n // Context: https://github.com/PrismJS/prism/blob/19f8de66b0f3a79aedbbf096081a4060fc0e80af/src/plugins/line-highlight/prism-line-highlight.ts#L82\n private _addHighlightSrOnlyText(code: string): SafeString {\n const NEW_LINE_EXP = /\\n(?!$)/g;\n const lines = code.split(NEW_LINE_EXP);\n const numLines = lines.length;\n const lineOffset = this.args.lineNumberStart\n ? this.args.lineNumberStart\n : 0;\n\n const highlightStart = '<span class=\"sr-only\">highlight start</span>';\n const highlightEnd = '<span class=\"sr-only\">highlight end</span>';\n\n const ranges = this.args.highlightLines\n ?.replace(/\\s+/g, '')\n .split(',')\n .filter(Boolean);\n\n if (ranges && ranges.length > 0) {\n const highlightedLines = [] as { start: number; end: number }[];\n\n ranges.forEach((currentRange) => {\n const range = currentRange.split('-');\n const start = +range[0]! - lineOffset;\n let end = +range[1]! || start - lineOffset;\n end = Math.min(numLines, end);\n highlightedLines.push({\n start: start,\n end: end,\n });\n });\n\n highlightedLines.forEach((line) => {\n lines[line.start - 1] = highlightStart + lines[line.start - 1];\n lines[line.end - 1] = lines[line.end - 1] + highlightEnd;\n });\n\n return htmlSafe(lines.join('\\n'));\n } else {\n return htmlSafe(code);\n }\n }\n\n get classNames(): string {\n // Currently there is only one theme so the class name is hard-coded.\n // In the future, additional themes such as a \"light\" theme could be added.\n const classes = ['hds-code-block', 'hds-code-block--theme-dark'];\n\n if (this.language) {\n classes.push(`language-${this.language}`);\n }\n\n if (this.isStandalone === true) {\n classes.push('hds-code-block--is-standalone');\n }\n\n if (this.hasLineWrapping === true) {\n classes.push('hds-code-block--has-line-wrapping');\n }\n\n // Note: Prism.js is using the specific class name \"line-numbers\" to determine implementation of line numbers in the UI\n if (this.hasLineNumbers) {\n classes.push('line-numbers');\n }\n\n if (this.showFooter) {\n classes.push('hds-code-block--has-overlay-footer');\n }\n\n if (this._isExpanded) {\n classes.push('hds-code-block--is-expanded');\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["LANGUAGES","Object","values","HdsCodeBlockLanguageValues","HdsCodeBlock","Component","g","prototype","tracked","htmlSafe","i","void 0","_preCodeId","guidFor","_preCodeElement","_observer","_setUpCodeObserver","modifier","element","querySelector","ResizeObserver","entries","forEach","entry","contentBoxSize","_updateCodeHeights","_updatePrismPlugins","observe","disconnect","_setUpCodeBlockCode","_isExpanded","setPrismCode","ariaLabelledBy","args","ariaLabel","undefined","_titleId","ariaDescribedBy","_descriptionId","code","value","assert","Prism","plugins","normalize","maxHeight","showFooter","_codeContentHeight","_codeContainerHeight","language","hasLineNumbers","isStandalone","hasLineWrapping","copyButtonText","registerTitleElement","id","n","action","registerDescriptionElement","grammar","languages","next","_prismCode","highlight","util","encode","toString","lineNumbers","removeChild","highlightLines","_addHighlightSrOnlyText","hooks","run","schedule","scrollHeight","clientHeight","resize","window","dispatchEvent","Event","toggleExpanded","NEW_LINE_EXP","lines","split","numLines","length","lineOffset","lineNumberStart","highlightStart","highlightEnd","ranges","replace","filter","Boolean","highlightedLines","currentRange","range","start","end","Math","min","push","line","join","classNames","classes","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;;AA2CO,MAAMA,SAAkC,GAAGC,MAAM,CAACC,MAAM,CAC7DC,0BACF;AAoCe,MAAMC,YAAY,SAASC,SAAS,CAAwB;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,YAAA,EAAA,CACxEC,OAAO,CAAA,EAAA,YAAA;MAAA,OAAkCC,QAAQ,CAAC,EAAE,CAAC;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,WAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,YAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAL,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,aAAA,EAAA,CACrDC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAgC,KAAK;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,YAAA,IAAAE,CAAA,CAAA,IAAA,EAAA,aAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAL,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,oBAAA,EAAA,CAC5CC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAsC,CAAC;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,mBAAA,IAAAE,CAAA,CAAA,IAAA,EAAA,oBAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAL,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,sBAAA,EAAA,CAC9CC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAwC,CAAC;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,qBAAA,IAAAE,CAAA,CAAA,IAAA,EAAA,sBAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAL,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,UAAA,EAAA,CAChDC,OAAO,CAAA,CAAA;AAAA;AAAA,EAAA,SAAA,IAAAE,CAAA,CAAA,IAAA,EAAA,UAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAL,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,gBAAA,EAAA,CACPC,OAAO,CAAA,CAAA;AAAA;AAAA,EAAA,eAAA,IAAAE,CAAA,CAAA,IAAA,EAAA,gBAAA,CAAA,EAAAC,MAAA;AAER;AACQC,EAAAA,UAAU,GAAG,WAAW,GAAGC,OAAO,CAAC,IAAI,CAAC;EACxCC,eAAe;EACfC,SAAS;;AAEjB;AACQC,EAAAA,kBAAkB,GAAGC,QAAQ,CAAEC,OAAoB,IAAK;IAC9D,IAAI,CAACJ,eAAe,GAAGI,OAAO,CAACC,aAAa,CAC1C,uBACF,CAAmB;AACnB,IAAA,IAAI,CAACJ,SAAS,GAAG,IAAIK,cAAc,CAAEC,OAAO,IAAK;AAC/CA,MAAAA,OAAO,CAACC,OAAO,CAAEC,KAAK,IAAK;QACzB,IAAIA,KAAK,CAACC,cAAc,EAAE;UACxB,IAAI,CAACC,kBAAkB,EAAE;UACzB,IAAI,CAACC,mBAAmB,EAAE;AAC5B,QAAA;AACF,MAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AACF,IAAA,IAAI,CAACX,SAAS,CAACY,OAAO,CAACT,OAAO,CAAC;AAE/B,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,CAACH,SAAS,CAACa,UAAU,EAAE;IAC7B,CAAC;AACH,EAAA,CAAC,CAAC;AAEMC,EAAAA,mBAAmB,GAAGZ,QAAQ,CAAEC,OAAoB,IAAK;AAC/D,IAAA,IAAI,CAACY,WAAW,GAAG,KAAK,CAAC;AACzB,IAAA,IAAI,CAACC,YAAY,CAACb,OAAO,CAAC;IAC1B,OAAO,MAAM,CAAC,CAAC;AACjB,EAAA,CAAC,CAAC;EAEF,IAAIc,cAAcA,GAAuB;AACvC,IAAA,IAAI,IAAI,CAACC,IAAI,CAACC,SAAS,KAAKC,SAAS,EAAE;AACrC,MAAA;AACF,IAAA;IAEA,OAAO,IAAI,CAACF,IAAI,CAACD,cAAc,IAAI,IAAI,CAACI,QAAQ;AAClD,EAAA;EAEA,IAAIC,eAAeA,GAAuB;IACxC,OAAO,IAAI,CAACJ,IAAI,CAACI,eAAe,IAAI,IAAI,CAACC,cAAc;AACzD,EAAA;;AAEA;EACA,IAAIC,IAAIA,GAAW;AACjB,IAAA,MAAMA,IAAI,GAAG,IAAI,CAACN,IAAI,CAACO,KAAK;AAE5BC,IAAAA,MAAM,CACJ,oDAAoD,EACpDF,IAAI,KAAKJ,SACX,CAAC;AAED,IAAA,IAAIO,KAAK,EAAEC,OAAO,GAAG,qBAAqB,CAAC,EAAE;AAC3C;MACA,OAAOD,KAAK,CAACC,OAAO,CAAC,qBAAqB,CAAC,CAACC,SAAS,CAACL,IAAI,CAAC;AAC7D,IAAA;AAEA,IAAA,OAAOA,IAAI;AACb,EAAA;EAEA,IAAIM,SAASA,GAAuB;IAClC,OAAO,IAAI,CAACf,WAAW,GAAG,MAAM,GAAG,IAAI,CAACG,IAAI,CAACY,SAAS;AACxD,EAAA;;AAEA;EACA,IAAIC,UAAUA,GAAY;AACxB,IAAA,IAAI,IAAI,CAACb,IAAI,CAACY,SAAS,EAAE;AACvB,MAAA,OAAO,IAAI,CAACE,kBAAkB,GAAG,IAAI,CAACC,oBAAoB;AAC5D,IAAA;AACA,IAAA,OAAO,KAAK;AACd,EAAA;;AAEA;EACA,IAAIC,QAAQA,GAAsC;AAChD,IAAA,OAAO,IAAI,CAAChB,IAAI,CAACgB,QAAQ,IAAId,SAAS;AACxC,EAAA;;AAEA;EACA,IAAIe,cAAcA,GAAY;AAC5B,IAAA,OAAO,IAAI,CAACjB,IAAI,CAACiB,cAAc,IAAI,IAAI;AACzC,EAAA;;AAEA;EACA,IAAIC,YAAYA,GAAY;AAC1B,IAAA,OAAO,IAAI,CAAClB,IAAI,CAACkB,YAAY,IAAI,IAAI;AACvC,EAAA;;AAEA;EACA,IAAIC,eAAeA,GAAY;AAC7B,IAAA,OAAO,IAAI,CAACnB,IAAI,CAACmB,eAAe,IAAI,KAAK;AAC3C,EAAA;EAEA,IAAIC,cAAcA,GAA2C;AAC3D,IAAA,OAAO,IAAI,CAACpB,IAAI,CAACoB,cAAc,GAAG,IAAI,CAACpB,IAAI,CAACoB,cAAc,GAAG,MAAM;AACrE,EAAA;EAGAC,oBAAoBA,CAACpC,OAA8C,EAAQ;AACzE,IAAA,IAAI,CAACkB,QAAQ,GAAGlB,OAAO,CAACqC,EAAE;AAC5B,EAAA;AAAC,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAjD,SAAA,EAAA,sBAAA,EAAA,CAHAkD,MAAM,CAAA,CAAA;AAAA;EAMPC,0BAA0BA,CACxBxC,OAAoD,EAC9C;AACN,IAAA,IAAI,CAACoB,cAAc,GAAGpB,OAAO,CAACqC,EAAE;AAClC,EAAA;AAAC,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAjD,SAAA,EAAA,4BAAA,EAAA,CALAkD,MAAM,CAAA,CAAA;AAAA;EAQP1B,YAAYA,CAACb,OAAoB,EAAQ;AACvC,IAAA,MAAMqB,IAAI,GAAG,IAAI,CAACA,IAAI;AACtB,IAAA,MAAMU,QAAQ,GAAG,IAAI,CAACA,QAAQ;IAC9B,MAAMU,OAAO,GAAGV,QAAQ,GAAGP,KAAK,CAACkB,SAAS,CAACX,QAAQ,CAAC,GAAGd,SAAS;AAEhE,IAAA,IAAII,IAAI,EAAE;AACR;AACAsB,MAAAA,IAAI,CAAC,MAAY;QACf,IAAIZ,QAAQ,IAAIU,OAAO,EAAE;AACvB,UAAA,IAAI,CAACG,UAAU,GAAGrD,QAAQ,CAACiC,KAAK,CAACqB,SAAS,CAACxB,IAAI,EAAEoB,OAAO,EAAEV,QAAQ,CAAC,CAAC;AACtE,QAAA,CAAC,MAAM;AACL;AACA,UAAA,IAAI,CAACa,UAAU,GAAGrD,QAAQ,CAACiC,KAAK,CAACsB,IAAI,CAACC,MAAM,CAAC1B,IAAI,CAAC,CAAC2B,QAAQ,EAAE,CAAC;AAChE,QAAA;;AAEA;AACA,QAAA,MAAMC,WAAW,GAAGjD,OAAO,CAACC,aAAa,CACvC,oBACF,CAAgB;AAChB,QAAA,IAAIgD,WAAW,EAAE;AACfjD,UAAAA,OAAO,CAACkD,WAAW,CAACD,WAAW,CAAC;AAClC,QAAA;AAEA,QAAA,IAAI,IAAI,CAAClC,IAAI,CAACoC,cAAc,EAAE;AAC5B,UAAA,IAAI,CAACP,UAAU,GAAG,IAAI,CAACQ,uBAAuB,CAC5C,IAAI,CAACR,UAAU,CAACI,QAAQ,EAC1B,CAAC;AACH,QAAA;;AAEA;AACA;AACAxB,QAAAA,KAAK,CAAC6B,KAAK,CAACC,GAAG,CAAC,UAAU,EAAE;UAC1BjC,IAAI;AACJrB,UAAAA;AACF,SAAC,CAAC;;AAEF;QACAuD,QAAQ,CAAC,aAAa,EAAE,MAAY;UAClC,IAAI,CAAChD,kBAAkB,EAAE;AACzB;UACA,IAAI,CAACC,mBAAmB,EAAE;AAC5B,QAAA,CAAC,CAAC;AACJ,MAAA,CAAC,CAAC;AACJ,IAAA;AACF,EAAA;AAAC,EAAA;IAAA8B,CAAA,CAAA,IAAA,CAAAjD,SAAA,EAAA,cAAA,EAAA,CA7CAkD,MAAM,CAAA,CAAA;AAAA;AA+CChC,EAAAA,kBAAkBA,GAAS;AACjC,IAAA,IAAI,CAAC,IAAI,CAACK,WAAW,EAAE;AACrB;MACA,IAAI,CAACiB,kBAAkB,GAAG,IAAI,CAACjC,eAAe,EAAE4D,YAAY,IAAI,CAAC;MACjE,IAAI,CAAC1B,oBAAoB,GAAG,IAAI,CAAClC,eAAe,EAAE6D,YAAY,IAAI,CAAC;AACrE,IAAA;AACF,EAAA;AAEQjD,EAAAA,mBAAmBA,GAAS;IAClC,IAAI,IAAI,CAACwB,cAAc,IAAIR,KAAK,EAAEC,OAAO,GAAG,aAAa,CAAC,EAAE;AAC1D;MACAD,KAAK,CAACC,OAAO,CAAC,aAAa,CAAC,CAACiC,MAAM,CAAC,IAAI,CAAC9D,eAAe,CAAC;AAC3D,IAAA;;AAEA;AACA;AACA,IAAA,IAAI,IAAI,CAACmB,IAAI,CAACoC,cAAc,EAAE;AAC5B;MACA,IAAIQ,MAAM,EAAEA,MAAM,CAACC,aAAa,CAAC,IAAIC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACvD,IAAA;AACF,EAAA;AAGAC,EAAAA,cAAcA,GAAS;AACrB,IAAA,IAAI,CAAClD,WAAW,GAAG,CAAC,IAAI,CAACA,WAAW;AACtC,EAAA;;AAEA;AACA;AAAA,EAAA;IAAA0B,CAAA,CAAA,IAAA,CAAAjD,SAAA,EAAA,gBAAA,EAAA,CANCkD,MAAM,CAAA,CAAA;AAAA;EAOCa,uBAAuBA,CAAC/B,IAAY,EAAc;IACxD,MAAM0C,YAAY,GAAG,UAAU;AAC/B,IAAA,MAAMC,KAAK,GAAG3C,IAAI,CAAC4C,KAAK,CAACF,YAAY,CAAC;AACtC,IAAA,MAAMG,QAAQ,GAAGF,KAAK,CAACG,MAAM;AAC7B,IAAA,MAAMC,UAAU,GAAG,IAAI,CAACrD,IAAI,CAACsD,eAAe,GACxC,IAAI,CAACtD,IAAI,CAACsD,eAAe,GACzB,CAAC;IAEL,MAAMC,cAAc,GAAG,8CAA8C;IACrE,MAAMC,YAAY,GAAG,4CAA4C;IAEjE,MAAMC,MAAM,GAAG,IAAI,CAACzD,IAAI,CAACoC,cAAc,EACnCsB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CACpBR,KAAK,CAAC,GAAG,CAAC,CACVS,MAAM,CAACC,OAAO,CAAC;AAElB,IAAA,IAAIH,MAAM,IAAIA,MAAM,CAACL,MAAM,GAAG,CAAC,EAAE;MAC/B,MAAMS,gBAAgB,GAAG,EAAsC;AAE/DJ,MAAAA,MAAM,CAACpE,OAAO,CAAEyE,YAAY,IAAK;AAC/B,QAAA,MAAMC,KAAK,GAAGD,YAAY,CAACZ,KAAK,CAAC,GAAG,CAAC;QACrC,MAAMc,KAAK,GAAG,CAACD,KAAK,CAAC,CAAC,CAAE,GAAGV,UAAU;QACrC,IAAIY,GAAG,GAAG,CAACF,KAAK,CAAC,CAAC,CAAE,IAAIC,KAAK,GAAGX,UAAU;QAC1CY,GAAG,GAAGC,IAAI,CAACC,GAAG,CAAChB,QAAQ,EAAEc,GAAG,CAAC;QAC7BJ,gBAAgB,CAACO,IAAI,CAAC;AACpBJ,UAAAA,KAAK,EAAEA,KAAK;AACZC,UAAAA,GAAG,EAAEA;AACP,SAAC,CAAC;AACJ,MAAA,CAAC,CAAC;AAEFJ,MAAAA,gBAAgB,CAACxE,OAAO,CAAEgF,IAAI,IAAK;AACjCpB,QAAAA,KAAK,CAACoB,IAAI,CAACL,KAAK,GAAG,CAAC,CAAC,GAAGT,cAAc,GAAGN,KAAK,CAACoB,IAAI,CAACL,KAAK,GAAG,CAAC,CAAC;AAC9Df,QAAAA,KAAK,CAACoB,IAAI,CAACJ,GAAG,GAAG,CAAC,CAAC,GAAGhB,KAAK,CAACoB,IAAI,CAACJ,GAAG,GAAG,CAAC,CAAC,GAAGT,YAAY;AAC1D,MAAA,CAAC,CAAC;MAEF,OAAOhF,QAAQ,CAACyE,KAAK,CAACqB,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,IAAA,CAAC,MAAM;MACL,OAAO9F,QAAQ,CAAC8B,IAAI,CAAC;AACvB,IAAA;AACF,EAAA;EAEA,IAAIiE,UAAUA,GAAW;AACvB;AACA;AACA,IAAA,MAAMC,OAAO,GAAG,CAAC,gBAAgB,EAAE,4BAA4B,CAAC;IAEhE,IAAI,IAAI,CAACxD,QAAQ,EAAE;MACjBwD,OAAO,CAACJ,IAAI,CAAC,CAAA,SAAA,EAAY,IAAI,CAACpD,QAAQ,EAAE,CAAC;AAC3C,IAAA;AAEA,IAAA,IAAI,IAAI,CAACE,YAAY,KAAK,IAAI,EAAE;AAC9BsD,MAAAA,OAAO,CAACJ,IAAI,CAAC,+BAA+B,CAAC;AAC/C,IAAA;AAEA,IAAA,IAAI,IAAI,CAACjD,eAAe,KAAK,IAAI,EAAE;AACjCqD,MAAAA,OAAO,CAACJ,IAAI,CAAC,mCAAmC,CAAC;AACnD,IAAA;;AAEA;IACA,IAAI,IAAI,CAACnD,cAAc,EAAE;AACvBuD,MAAAA,OAAO,CAACJ,IAAI,CAAC,cAAc,CAAC;AAC9B,IAAA;IAEA,IAAI,IAAI,CAACvD,UAAU,EAAE;AACnB2D,MAAAA,OAAO,CAACJ,IAAI,CAAC,oCAAoC,CAAC;AACpD,IAAA;IAEA,IAAI,IAAI,CAACvE,WAAW,EAAE;AACpB2E,MAAAA,OAAO,CAACJ,IAAI,CAAC,6BAA6B,CAAC;AAC7C,IAAA;AAEA,IAAA,OAAOI,OAAO,CAACF,IAAI,CAAC,GAAG,CAAC;AAC1B,EAAA;AACF;AAACG,oBAAA,CAAAC,QAAA,EAzQoBvG,YAAY,CAAA;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/hds/code-block/index.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { next, schedule } from '@ember/runloop';\nimport { htmlSafe } from '@ember/template';\nimport { guidFor } from '@ember/object/internals';\nimport { modifier } from 'ember-modifier';\n\nimport Prism from 'prismjs';\n\nimport type { SafeString } from '@ember/template';\nimport type { WithBoundArgs } from '@glint/template';\n\nimport type { HdsCodeBlockTitleSignature } from './title';\nimport type { HdsCodeBlockDescriptionSignature } from './description';\nimport { HdsCodeBlockLanguageValues } from './types.ts';\nimport type { HdsCodeBlockLanguages } from './types.ts';\nimport type { HdsCopyButtonSignature } from '../copy/button/index.ts';\n\nimport HdsCodeBlockTitleComponent from './title.ts';\nimport HdsCodeBlockDescriptionComponent from './description.ts';\n\nimport 'prismjs/plugins/line-numbers/prism-line-numbers';\nimport 'prismjs/plugins/line-highlight/prism-line-highlight';\n\nimport 'prismjs/components/prism-bash';\nimport 'prismjs/components/prism-go';\nimport 'prismjs/components/prism-hcl';\nimport 'prismjs/components/prism-json';\nimport 'prismjs/components/prism-log';\nimport 'prismjs/components/prism-ruby';\nimport 'prismjs/components/prism-shell-session';\nimport 'prismjs/components/prism-yaml';\n\n// These imports are required to overcome a global variable clash in Helios website\n// where language import are overriden by the Prism instance in `CodeBlock`\n// Note that `prism-handlebars` is dependant on `prism-markup-templating`\nimport 'prismjs/components/prism-markup-templating';\nimport 'prismjs/components/prism-handlebars';\n\nexport const LANGUAGES: HdsCodeBlockLanguages[] = Object.values(\n HdsCodeBlockLanguageValues\n);\n\nexport interface HdsCodeBlockSignature {\n Args: {\n ariaLabel?: string;\n ariaLabelledBy?: string;\n ariaDescribedBy?: string;\n hasCopyButton?: boolean;\n hasLineNumbers?: boolean;\n hasLineWrapping?: boolean;\n highlightLines?: string;\n lineNumberStart?: number;\n isStandalone?: boolean;\n language?: HdsCodeBlockLanguages;\n maxHeight?: string;\n value: string;\n copyButtonText?: HdsCopyButtonSignature['Args']['text'];\n onCopy?: HdsCopyButtonSignature['Args']['onSuccess'];\n copySuccessMessageText?: HdsCopyButtonSignature['Args']['ariaMessageText'];\n };\n Blocks: {\n default: [\n {\n Title?: WithBoundArgs<\n typeof HdsCodeBlockTitleComponent,\n 'didInsertNode'\n >;\n Description?: WithBoundArgs<\n typeof HdsCodeBlockDescriptionComponent,\n 'didInsertNode'\n >;\n },\n ];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsCodeBlock extends Component<HdsCodeBlockSignature> {\n @tracked private _prismCode: SafeString = htmlSafe('');\n @tracked private _isExpanded: boolean = false;\n @tracked private _codeContentHeight: number = 0;\n @tracked private _codeContainerHeight: number = 0;\n @tracked private _titleId: string | undefined;\n @tracked private _descriptionId: string | undefined;\n\n // Generates a unique ID for the code content\n private _preCodeId = 'pre-code-' + guidFor(this);\n private _preCodeElement!: HTMLPreElement;\n private _observer!: ResizeObserver;\n\n // If a code block is hidden from view, and made visible after load, the Prism code needs to be re-run\n private _setUpCodeObserver = modifier((element: HTMLElement) => {\n this._preCodeElement = element.querySelector(\n '.hds-code-block__code'\n ) as HTMLPreElement;\n this._observer = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.contentBoxSize) {\n this._updateCodeHeights();\n this._updatePrismPlugins();\n }\n });\n });\n this._observer.observe(element);\n\n return () => {\n this._observer.disconnect();\n };\n });\n\n private _setUpCodeBlockCode = modifier((element: HTMLElement) => {\n this._isExpanded = false; // reset expanded state on updates\n this.setPrismCode(element);\n return () => {};\n });\n\n get ariaLabelledBy(): string | undefined {\n if (this.args.ariaLabel !== undefined) {\n return;\n }\n\n return this.args.ariaLabelledBy ?? this._titleId;\n }\n\n get ariaDescribedBy(): string | undefined {\n return this.args.ariaDescribedBy ?? this._descriptionId;\n }\n\n // code text content for the CodeBlock\n get code(): string {\n const code = this.args.value;\n\n assert(\n '@code for \"Hds::CodeBlock\" must have a valid value',\n code !== undefined\n );\n\n if (Prism?.plugins?.['NormalizeWhitespace']) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n return Prism.plugins['NormalizeWhitespace'].normalize(code);\n }\n\n return code;\n }\n\n get maxHeight(): string | undefined {\n return this._isExpanded ? 'none' : this.args.maxHeight;\n }\n\n // Shows overlay footer if maxHeight is set and the pre tag content height is greater than the pre tag height\n get showFooter(): boolean {\n if (this.args.maxHeight) {\n return this._codeContentHeight > this._codeContainerHeight;\n }\n return false;\n }\n\n // Name of coding language used within CodeBlock for syntax highlighting\n get language(): HdsCodeBlockLanguages | undefined {\n return this.args.language ?? undefined;\n }\n\n // Displays line numbers if true\n get hasLineNumbers(): boolean {\n return this.args.hasLineNumbers ?? true;\n }\n\n // Make CodeBlock container corners appear rounded (the standalone variation)\n get isStandalone(): boolean {\n return this.args.isStandalone ?? true;\n }\n\n // Make text content wrap to multiple lines\n get hasLineWrapping(): boolean {\n return this.args.hasLineWrapping ?? false;\n }\n\n get copyButtonText(): HdsCopyButtonSignature['Args']['text'] {\n return this.args.copyButtonText ? this.args.copyButtonText : 'Copy';\n }\n\n @action\n registerTitleElement(element: HdsCodeBlockTitleSignature['Element']): void {\n this._titleId = element.id;\n }\n\n @action\n registerDescriptionElement(\n element: HdsCodeBlockDescriptionSignature['Element']\n ): void {\n this._descriptionId = element.id;\n }\n\n @action\n setPrismCode(element: HTMLElement): void {\n const code = this.code;\n const language = this.language;\n const grammar = language ? Prism.languages[language] : undefined;\n\n if (code) {\n // eslint-disable-next-line ember/no-runloop\n next((): void => {\n if (language && grammar) {\n this._prismCode = htmlSafe(Prism.highlight(code, grammar, language));\n } else {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n this._prismCode = htmlSafe(Prism.util.encode(code).toString());\n }\n\n // Existing line numbers must be removed in order to be updated correctly\n const lineNumbers = element.querySelector(\n '.line-numbers-rows'\n ) as HTMLElement;\n if (lineNumbers) {\n element.removeChild(lineNumbers);\n }\n\n if (this.args.highlightLines) {\n this._prismCode = this._addHighlightSrOnlyText(\n this._prismCode.toString()\n );\n }\n\n // Force prism-line-numbers plugin initialization, required for Prism.highlight usage\n // See https://github.com/PrismJS/prism/issues/1234\n Prism.hooks.run('complete', {\n code,\n element,\n });\n\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this._updateCodeHeights();\n // we need to delay re-evaluating the context for prism plugins for as much as possible, and `afterRender` is the 'latest' we can use in the component lifecycle\n this._updatePrismPlugins();\n });\n });\n }\n }\n\n private _updateCodeHeights(): void {\n if (!this._isExpanded) {\n // Get the actual height & the content height of the preCodeElement\n this._codeContentHeight = this._preCodeElement?.scrollHeight ?? 0;\n this._codeContainerHeight = this._preCodeElement?.clientHeight ?? 0;\n }\n }\n\n private _updatePrismPlugins(): void {\n if (this.hasLineNumbers && Prism?.plugins?.['lineNumbers']) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n Prism.plugins['lineNumbers'].resize(this._preCodeElement);\n }\n\n // Force prism-line-highlight plugin initialization\n // Context: https://github.com/hashicorp/design-system/pull/1749#discussion_r1374288785\n if (this.args.highlightLines) {\n // we piggy-back on the plugin's `resize` event listener to trigger a new call of the `highlightLines` function: https://github.com/PrismJS/prism/blob/master/plugins/line-highlight/prism-line-highlight.js#L337\n if (window) window.dispatchEvent(new Event('resize'));\n }\n }\n\n @action\n toggleExpanded(): void {\n this._isExpanded = !this._isExpanded;\n }\n\n // Logic for determining where line highlighting starts and ends taken from Prism.js plugin source code\n // Context: https://github.com/PrismJS/prism/blob/19f8de66b0f3a79aedbbf096081a4060fc0e80af/src/plugins/line-highlight/prism-line-highlight.ts#L82\n private _addHighlightSrOnlyText(code: string): SafeString {\n const NEW_LINE_EXP = /\\n(?!$)/g;\n const lines = code.split(NEW_LINE_EXP);\n const numLines = lines.length;\n const lineOffset = this.args.lineNumberStart\n ? this.args.lineNumberStart\n : 0;\n\n const highlightStart = '<span class=\"sr-only\">highlight start</span>';\n const highlightEnd = '<span class=\"sr-only\">highlight end</span>';\n\n const ranges = this.args.highlightLines\n ?.replace(/\\s+/g, '')\n .split(',')\n .filter(Boolean);\n\n if (ranges && ranges.length > 0) {\n const highlightedLines = [] as { start: number; end: number }[];\n\n ranges.forEach((currentRange) => {\n const range = currentRange.split('-');\n const start = +range[0]! - lineOffset;\n let end = +range[1]! || start - lineOffset;\n end = Math.min(numLines, end);\n highlightedLines.push({\n start: start,\n end: end,\n });\n });\n\n highlightedLines.forEach((line) => {\n lines[line.start - 1] = highlightStart + lines[line.start - 1];\n lines[line.end - 1] = lines[line.end - 1] + highlightEnd;\n });\n\n return htmlSafe(lines.join('\\n'));\n } else {\n return htmlSafe(code);\n }\n }\n\n get classNames(): string {\n // Currently there is only one theme so the class name is hard-coded.\n // In the future, additional themes such as a \"light\" theme could be added.\n const classes = ['hds-code-block', 'hds-code-block--theme-dark'];\n\n if (this.language) {\n classes.push(`language-${this.language}`);\n }\n\n if (this.isStandalone === true) {\n classes.push('hds-code-block--is-standalone');\n }\n\n if (this.hasLineWrapping === true) {\n classes.push('hds-code-block--has-line-wrapping');\n }\n\n // Note: Prism.js is using the specific class name \"line-numbers\" to determine implementation of line numbers in the UI\n if (this.hasLineNumbers) {\n classes.push('line-numbers');\n }\n\n if (this.showFooter) {\n classes.push('hds-code-block--has-overlay-footer');\n }\n\n if (this._isExpanded) {\n classes.push('hds-code-block--is-expanded');\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["LANGUAGES","Object","values","HdsCodeBlockLanguageValues","HdsCodeBlock","Component","g","prototype","tracked","htmlSafe","i","void 0","_preCodeId","guidFor","_preCodeElement","_observer","_setUpCodeObserver","modifier","element","querySelector","ResizeObserver","entries","forEach","entry","contentBoxSize","_updateCodeHeights","_updatePrismPlugins","observe","disconnect","_setUpCodeBlockCode","_isExpanded","setPrismCode","ariaLabelledBy","args","ariaLabel","undefined","_titleId","ariaDescribedBy","_descriptionId","code","value","assert","Prism","plugins","normalize","maxHeight","showFooter","_codeContentHeight","_codeContainerHeight","language","hasLineNumbers","isStandalone","hasLineWrapping","copyButtonText","registerTitleElement","id","n","action","registerDescriptionElement","grammar","languages","next","_prismCode","highlight","util","encode","toString","lineNumbers","removeChild","highlightLines","_addHighlightSrOnlyText","hooks","run","schedule","scrollHeight","clientHeight","resize","window","dispatchEvent","Event","toggleExpanded","NEW_LINE_EXP","lines","split","numLines","length","lineOffset","lineNumberStart","highlightStart","highlightEnd","ranges","replace","filter","Boolean","highlightedLines","currentRange","range","start","end","Math","min","push","line","join","classNames","classes","setComponentTemplate","TEMPLATE"],"mappings":"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"}
@@ -2,12 +2,13 @@ import Component from '@glimmer/component';
2
2
  import { assert } from '@ember/debug';
3
3
  import { tracked } from '@glimmer/tracking';
4
4
  import { action } from '@ember/object';
5
+ import { service } from '@ember/service';
5
6
  import { HdsCopyButtonSizeValues } from './types.js';
6
7
  import { precompileTemplate } from '@ember/template-compilation';
7
8
  import { g, i, n } from 'decorator-transforms/runtime';
8
9
  import { setComponentTemplate } from '@ember/component';
9
10
 
10
- var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n<Hds::Button\n class={{this.classNames}}\n @size={{this.size}}\n @isFullWidth={{@isFullWidth}}\n @text={{@text}}\n @icon={{this.icon}}\n @isIconOnly={{@isIconOnly}}\n @color=\"secondary\"\n @iconPosition=\"trailing\"\n {{hds-clipboard text=@textToCopy target=@targetToCopy onSuccess=this.onSuccess onError=this.onError}}\n ...attributes\n/>");
11
+ var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n<Hds::Button\n class={{this.classNames}}\n @size={{this.size}}\n @isFullWidth={{@isFullWidth}}\n @text={{@text}}\n @icon={{this.icon}}\n @isIconOnly={{@isIconOnly}}\n @color=\"secondary\"\n @iconPosition=\"trailing\"\n {{hds-clipboard text=@textToCopy target=@targetToCopy onSuccess=this.onSuccess onError=this.onError}}\n ...attributes\n/>\n<span class=\"sr-only\" aria-live=\"polite\">{{this.ariaMessageText}}</span>");
11
12
 
12
13
  /**
13
14
  * Copyright (c) HashiCorp, Inc.
@@ -21,6 +22,10 @@ const SUCCESS_ICON = 'clipboard-checked';
21
22
  const ERROR_ICON = 'clipboard-x';
22
23
  const DEFAULT_STATUS = 'idle';
23
24
  class HdsCopyButton extends Component {
25
+ static {
26
+ g(this.prototype, "hdsIntl", [service]);
27
+ }
28
+ #hdsIntl = (i(this, "hdsIntl"), void 0);
24
29
  static {
25
30
  g(this.prototype, "_status", [tracked], function () {
26
31
  return DEFAULT_STATUS;
@@ -73,6 +78,15 @@ class HdsCopyButton extends Component {
73
78
  classes.push(`hds-copy-button--status-${this._status}`);
74
79
  return classes.join(' ');
75
80
  }
81
+ get ariaMessageText() {
82
+ if (this._status === 'success') {
83
+ return this.args.ariaMessageText ?? this.hdsIntl.t('hds.components.copy-button.aria-message-text', {
84
+ default: 'Copied to clipboard'
85
+ });
86
+ } else {
87
+ return '';
88
+ }
89
+ }
76
90
  onSuccess(args) {
77
91
  this._status = 'success';
78
92
  this.resetStatusDelayed();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/hds/copy/button/index.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { HdsCopyButtonSizeValues } from './types.ts';\nimport type { HdsCopyButtonSizes } from './types.ts';\nimport type { HdsButtonSignature } from '../../button/';\nimport type { HdsClipboardModifierSignature } from '../../../../modifiers/hds-clipboard.ts';\nimport type { HdsIconSignature } from '../../icon';\n\nexport const DEFAULT_SIZE = HdsCopyButtonSizeValues.Medium;\nexport const SIZES: HdsCopyButtonSizes[] = Object.values(\n HdsCopyButtonSizeValues\n);\nexport const DEFAULT_ICON = 'clipboard-copy';\nexport const SUCCESS_ICON = 'clipboard-checked';\nexport const ERROR_ICON = 'clipboard-x';\nexport const DEFAULT_STATUS = 'idle';\n\nexport interface HdsCopyButtonSignature {\n Args: HdsButtonSignature['Args'] & {\n size?: HdsCopyButtonSizes;\n textToCopy?: HdsClipboardModifierSignature['Args']['Named']['text'];\n targetToCopy?: HdsClipboardModifierSignature['Args']['Named']['target'];\n onSuccess?: HdsClipboardModifierSignature['Args']['Named']['onSuccess'];\n onError?: HdsClipboardModifierSignature['Args']['Named']['onError'];\n };\n Element: HdsButtonSignature['Element'];\n}\n\nexport default class HdsCopyButton extends Component<HdsCopyButtonSignature> {\n @tracked private _status = DEFAULT_STATUS;\n @tracked private _timer: ReturnType<typeof setTimeout> | undefined;\n\n /**\n * @param icon\n * @type {string}\n * @description The icon to be displayed for each status; automatically calculated based on the tracked property `status`.\n */\n get icon(): HdsIconSignature['Args']['name'] {\n let icon: HdsIconSignature['Args']['name'] = DEFAULT_ICON;\n if (this._status === 'success') {\n icon = SUCCESS_ICON;\n } else if (this._status === 'error') {\n icon = ERROR_ICON;\n }\n return icon;\n }\n\n /**\n * @param size\n * @type {string}\n * @default medium\n * @description The size of the copy/button; acceptable values are `small` and `medium`\n */\n get size(): HdsCopyButtonSizes {\n const { size = DEFAULT_SIZE } = this.args;\n\n assert(\n `@size for \"Hds::Copy::Button\" must be one of the following: ${SIZES.join(\n ', '\n )}; received: ${size}`,\n SIZES.includes(size)\n );\n\n return size;\n }\n\n /**\n * Get the class names to apply to the component.\n * @method CopyButton#classNames\n * @return {string} The \"class\" attribute to apply to the component.\n */\n get classNames(): string {\n const classes = ['hds-copy-button'];\n\n // add a class based on the @size argument\n classes.push(`hds-button--size-${this.size}`);\n\n classes.push(`hds-copy-button--status-${this._status}`);\n\n return classes.join(' ');\n }\n\n @action\n onSuccess(\n args: HdsClipboardModifierSignature['Args']['Named']['onSuccess']\n ): void {\n this._status = 'success';\n this.resetStatusDelayed();\n\n const { onSuccess } = this.args;\n\n if (typeof onSuccess === 'function') {\n onSuccess(args);\n }\n }\n\n @action\n onError(\n args: HdsClipboardModifierSignature['Args']['Named']['onError']\n ): void {\n this._status = 'error';\n this.resetStatusDelayed();\n\n const { onError } = this.args;\n\n if (typeof onError === 'function') {\n onError(args);\n }\n }\n\n resetStatusDelayed(): void {\n clearTimeout(this._timer);\n // make it fade back to the default state\n this._timer = setTimeout((): void => {\n this._status = DEFAULT_STATUS;\n }, 1500);\n }\n}\n"],"names":["DEFAULT_SIZE","HdsCopyButtonSizeValues","Medium","SIZES","Object","values","DEFAULT_ICON","SUCCESS_ICON","ERROR_ICON","DEFAULT_STATUS","HdsCopyButton","Component","g","prototype","tracked","i","void 0","icon","_status","size","args","assert","join","includes","classNames","classes","push","onSuccess","resetStatusDelayed","n","action","onError","clearTimeout","_timer","setTimeout","setComponentTemplate","TEMPLATE"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/hds/copy/button/index.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\n\nimport { HdsCopyButtonSizeValues } from './types.ts';\n\nimport type { HdsCopyButtonSizes } from './types.ts';\nimport type { HdsButtonSignature } from '../../button/';\nimport type { HdsClipboardModifierSignature } from '../../../../modifiers/hds-clipboard.ts';\nimport type { HdsIconSignature } from '../../icon';\nimport type HdsIntlService from '../../../../services/hds-intl';\n\nexport const DEFAULT_SIZE = HdsCopyButtonSizeValues.Medium;\nexport const SIZES: HdsCopyButtonSizes[] = Object.values(\n HdsCopyButtonSizeValues\n);\nexport const DEFAULT_ICON = 'clipboard-copy';\nexport const SUCCESS_ICON = 'clipboard-checked';\nexport const ERROR_ICON = 'clipboard-x';\nexport const DEFAULT_STATUS = 'idle';\n\nexport interface HdsCopyButtonSignature {\n Args: HdsButtonSignature['Args'] & {\n size?: HdsCopyButtonSizes;\n textToCopy?: HdsClipboardModifierSignature['Args']['Named']['text'];\n targetToCopy?: HdsClipboardModifierSignature['Args']['Named']['target'];\n onSuccess?: HdsClipboardModifierSignature['Args']['Named']['onSuccess'];\n onError?: HdsClipboardModifierSignature['Args']['Named']['onError'];\n ariaMessageText?: string;\n };\n Element: HdsButtonSignature['Element'];\n}\n\nexport default class HdsCopyButton extends Component<HdsCopyButtonSignature> {\n @service hdsIntl!: HdsIntlService;\n\n @tracked private _status = DEFAULT_STATUS;\n @tracked private _timer: ReturnType<typeof setTimeout> | undefined;\n\n /**\n * @param icon\n * @type {string}\n * @description The icon to be displayed for each status; automatically calculated based on the tracked property `status`.\n */\n get icon(): HdsIconSignature['Args']['name'] {\n let icon: HdsIconSignature['Args']['name'] = DEFAULT_ICON;\n if (this._status === 'success') {\n icon = SUCCESS_ICON;\n } else if (this._status === 'error') {\n icon = ERROR_ICON;\n }\n return icon;\n }\n\n /**\n * @param size\n * @type {string}\n * @default medium\n * @description The size of the copy/button; acceptable values are `small` and `medium`\n */\n get size(): HdsCopyButtonSizes {\n const { size = DEFAULT_SIZE } = this.args;\n\n assert(\n `@size for \"Hds::Copy::Button\" must be one of the following: ${SIZES.join(\n ', '\n )}; received: ${size}`,\n SIZES.includes(size)\n );\n\n return size;\n }\n\n /**\n * Get the class names to apply to the component.\n * @method CopyButton#classNames\n * @return {string} The \"class\" attribute to apply to the component.\n */\n get classNames(): string {\n const classes = ['hds-copy-button'];\n\n // add a class based on the @size argument\n classes.push(`hds-button--size-${this.size}`);\n\n classes.push(`hds-copy-button--status-${this._status}`);\n\n return classes.join(' ');\n }\n\n get ariaMessageText(): string {\n if (this._status === 'success') {\n return (\n this.args.ariaMessageText ??\n this.hdsIntl.t('hds.components.copy-button.aria-message-text', {\n default: 'Copied to clipboard',\n })\n );\n } else {\n return '';\n }\n }\n\n @action\n onSuccess(\n args: HdsClipboardModifierSignature['Args']['Named']['onSuccess']\n ): void {\n this._status = 'success';\n this.resetStatusDelayed();\n\n const { onSuccess } = this.args;\n\n if (typeof onSuccess === 'function') {\n onSuccess(args);\n }\n }\n\n @action\n onError(\n args: HdsClipboardModifierSignature['Args']['Named']['onError']\n ): void {\n this._status = 'error';\n this.resetStatusDelayed();\n\n const { onError } = this.args;\n\n if (typeof onError === 'function') {\n onError(args);\n }\n }\n\n resetStatusDelayed(): void {\n clearTimeout(this._timer);\n // make it fade back to the default state\n this._timer = setTimeout((): void => {\n this._status = DEFAULT_STATUS;\n }, 1500);\n }\n}\n"],"names":["DEFAULT_SIZE","HdsCopyButtonSizeValues","Medium","SIZES","Object","values","DEFAULT_ICON","SUCCESS_ICON","ERROR_ICON","DEFAULT_STATUS","HdsCopyButton","Component","g","prototype","service","i","void 0","tracked","icon","_status","size","args","assert","join","includes","classNames","classes","push","ariaMessageText","hdsIntl","t","default","onSuccess","resetStatusDelayed","n","action","onError","clearTimeout","_timer","setTimeout","setComponentTemplate","TEMPLATE"],"mappings":"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"}
@@ -2,7 +2,7 @@ import TemplateOnlyComponent from '@ember/component/template-only';
2
2
  import { precompileTemplate } from '@ember/template-compilation';
3
3
  import { setComponentTemplate } from '@ember/component';
4
4
 
5
- var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n<div class=\"hds-dialog-primitive__body {{@contextualClass}}\" tabindex=\"0\" ...attributes>\n {{yield}}\n</div>");
5
+ var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n<div class=\"hds-dialog-primitive__body {{@contextualClass}}\" tabindex=\"-1\" ...attributes>\n {{yield}}\n</div>");
6
6
 
7
7
  /**
8
8
  * Copyright (c) HashiCorp, Inc.