@econnect/webcomponents-library
Documentation
Styleguide
Documentation
Styleguide
  • Getting Started

    • Installation
    • Patch Notes
    • Styleguide
  • Styling

    • e-connect colors
  • UI Components

    • Form

      • Search Field
      • Form Field
      • Forms
    • Filter

      • Filter
      • Search Filter
    • Grid

      • Grid
      • Grid Row
    • Inputs

      • File Input
      • Input Checkbox
      • Input Dropdown
      • Input Date
      • Input Date Time
      • Input Date Time Local
      • Input File
      • Input Label
      • Input Multi Select
      • Input Number
      • Input Radio
      • Input Range
      • Input Select
      • Input Switch
      • Input Slider
      • Input Text
      • Input TextArea
      • Input Time
      • Input Time Range
    • Controls

      • Booleans
      • Button
      • Checkboxes
      • Date Displays
      • Dropdown Lists
      • Text Displays
    • Headers

      • e-header
    • Cards

      • e-card
    • Images

      • Icon
      • Images
      • Flag Image
      • Hamburger
    • Iframe
    • Pager
    • Settings
    • Document Validation
    • Navigation

      • Navigation
      • Navigation Menu
      • Navigation Footer
      • Navigation Button
      • Navigation Button Item
      • Navigation Search Item

Date Displays v1.0

The <e-date-display> component is a component that can be used for .

Usage

An unavailable has attributes that must be provided,

<e-date-display
  :modelValue=''
/>

Attributes

modelValue | Type: Date | Default: new Date()

Examples

Below a few interactive examples of unavailable can be found.

Default
<e-date-display />
10/10/2025
10/10/2025-
:modelValue='new Date("1966-02-06T00:00:00.000Z")'
<e-date-display
  :modelValue='new Date("1966-02-06T00:00:00.000Z")'
/>
10/10/2025
10/10/2025-

Source Code

e-date-display.vue
<script lang="ts" setup>
import { computed } from 'vue';

import { useI18n } from 'vue-i18n';

import type { CardColors } from 'types/dashboard/cardColors';
import { getIconColor, getIconHoverColor } from 'utils/iconUtils';

import EIcon from '../e-icon/e-icon.vue';

export type Props = {
  modelValue?: Date | string;
  copyEnabled?: boolean;
  colorStyle?: CardColors;
};
defineOptions({
  inheritAttrs: false,
  customOptions: {}
});
const props = withDefaults(defineProps<Props>(), {
  modelValue: () => {
    return new Date();
  },
  copyEnabled: false,
  colorStyle: () => {
    return 'default';
  }
});

const { locale, t } = useI18n({ useScope: 'global' });

function CopyValue(textValue: string) {
  navigator.clipboard.writeText(textValue);
}

const iconColor = computed(() => {
  return getIconColor(props.colorStyle);
});

const iconColorHover = computed(() => {
  return getIconHoverColor(props.colorStyle);
});

const copySpanIconStyle = computed(() => {
  return {
    key: `copy-span-${props.colorStyle}`,
    state: {
      default: {
        colors: [iconColor.value],
        fillColors: [],
        strokeColors: []
      },
      disabled: {
        colors: ['var(--e-disabled)'],
        fillColors: [],
        strokeColors: []
      },
      hovered: {
        colors: [iconColorHover.value],
        fillColors: [],
        strokeColors: []
      }
    }
  };
});

const iconStyle = computed(() => {
  return `copy-span-${props.colorStyle}`;
});

const formattedDate = computed(() => {
  if (!props.modelValue) {
    return '-';
  }
  return new Date(props.modelValue).toLocaleDateString(locale.value);
});
</script>

<template>
  <div class="e-date-display">
    <span
      :aria-label="formattedDate"
      :title="formattedDate"
      v-text="formattedDate"
    />
    <e-icon
      v-if="modelValue && copyEnabled"
      class="copy-icon"
      :icon="['copy']"
      :custom-style="copySpanIconStyle"
      focusable
      :style-key="iconStyle"
      :aria-label="t('functions.copyX', [modelValue.toString()])"
      @click="CopyValue(modelValue.toString())"
    />
  </div>
</template>

<style scoped lang="scss">
$icon-size: 16px;

.e-date-display {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  text-align: left;
  font-size: 14px;
  gap: 4px;
  width: 100%;

  span {
    white-space: nowrap;
  }

  small {
    margin-top: 3px;
    padding-right: 10px;
    white-space: nowrap;
  }

  span:not(:first-child):not(:last-child) {
    transition: all ease-in-out 50ms;
    margin-left: 1rem;

    &:hover {
      margin-left: 1.5rem;
      font-size: 120%;
    }
  }

  > .copy-icon {
    flex: 0 0 auto;
    align-self: center;
    width: $icon-size;
    height: $icon-size;
    visibility: hidden;
  }

  &:hover {
    > svg {
      visibility: visible;
    }
  }
}
</style>
Last Updated:: 10/10/24, 2:56 PM
Contributors: Antony Elfferich, Roeland Krijgsman, AzureAD\MarcelLommers, Marcel Lommers
Prev
Checkboxes
Next
Dropdown Lists