Skip to main content

Week Picker

<gstock-week-picker> | GstockWeekPicker
<gstock-week-picker value="2024-12-01"></gstock-week-picker>

Size

Use the size attribute to change size of the input.

<gstock-week-picker size="small"></gstock-week-picker>
<gstock-week-picker size="medium"></gstock-week-picker>
<gstock-week-picker size="large"></gstock-week-picker>

Placeholder

Use the placeholder attribute to change the default placeholder.

<gstock-week-picker placeholder="yyyy-mm-dd"></gstock-week-picker>

Disabled

Use the disabled attribute to disable the input.

<gstock-week-picker disabled value="2024-12-31"></gstock-week-picker>

Date format

Use the date-format attribute to change the format of the date. By the default, the date format is YYYY-MM-DD and the this attribute accepts the following formats:

DD/MM/YYYY DD-MM-YYYY DD.MM.YYYY YYYY/MM/DD YYYY-MM-DD YYYY.MM.DD MM/DD/YYYY MM-DD-YYYY MM.DD.YYYY
<gstock-week-picker clearable label="Select a week" date-format="DD/MM/YYYY"></gstock-week-picker>

<div class="playground-controls">
  <gstock-select size="small" label="Date format" value="DD/MM/YYYY">
    <gstock-option value="DD/MM/YYYY">DD/MM/YYYY</gstock-option>
    <gstock-option value="DD-MM-YYYY">DD-MM-YYYY</gstock-option>
    <gstock-option value="DD.MM.YYYY">DD.MM.YYYY</gstock-option>
    <gstock-option value="YYYY/MM/DD">YYYY/MM/DD</gstock-option>
    <gstock-option value="YYYY-MM-DD">YYYY-MM-DD</gstock-option>
    <gstock-option value="YYYY.MM.DD">YYYY.MM.DD</gstock-option>
    <gstock-option value="MM/DD/YYYY">MM/DD/YYYY</gstock-option>
    <gstock-option value="MM-DD-YYYY">MM-DD-YYYY</gstock-option>
    <gstock-option value="MM.DD.YYYY">MM.DD.YYYY</gstock-option>
  </gstock-select>

  <script type="module">
    const weekPicker = document.querySelector('gstock-week-picker');
    const dateFormatSelect = document.querySelector('gstock-select');

    await Promise.all([customElements.whenDefined('gstock-week-picker')]).then(() => {
      dateFormatSelect.addEventListener(
        'gstock-change-event',
        (event) => {
          weekPicker.setAttribute("date-format", event.target.value);
        },
      );
    });
  </script>

  <style>
    .playground-controls gstock-button,
    .playground-controls gstock-select {
      margin-bottom: 1rem;
      max-width: 300px;
    }
  </style>
</div>

Show current date

Use the show-current-date attribute to highlight current date. By default the current date will be highlighted, for disabled this mark set the attribute to false.

<gstock-week-picker show-current-date="false"></gstock-week-picker>

Maximum date

Use the max attribute to limit a maximum date that is selectable.

<gstock-week-picker max="2024-12-31"></gstock-week-picker>

Minimum date

Use the min attribute to limit a maximum date that is selectable.

<gstock-week-picker min="2024-08-15"></gstock-week-picker>

Start day of week

Use the start-day-week attribute to change the day the week starts.

<gstock-week-picker start-day-week="2"></gstock-week-picker>

Label and help text

Use the label and help-text attribute to give the input more accessible.

<gstock-week-picker label="Label" help-text="This is a test help-text."></gstock-week-picker>

For custom labels and help texts with HTML, use the label and help-text slots.

Custom help-text with a link.
<gstock-week-picker>
  <label slot="label" style="display: inline-flex; gap: 4px">
    <gstock-icon name="edit"></gstock-icon> Custom label
  </label>
  <span slot="help-text"> Custom help-text with a <a href="#label-and-help-text">link</a>. </span>
</gstock-week-picker>

Clearable

Use the clearable attribute to add a clear button when the input has content.

<gstock-week-picker clearable value="2024-12-25"></gstock-week-picker>

Events

Change

Use the gstock-change-event event to observe when the value was changed. To emit this event select a date from the calendar picker.

  • Value:
  • Display Label:
<gstock-week-picker label="Change Event" date-format="YYYY/MM/DD"></gstock-week-picker>

<ul class="output">
  <li><span class="output__key">Value: </span><code class="output__value value"></code></li>
  <li><span class="output__key">Display Label: </span><code class="output__value display-label"></code></li>
</ul>

<script type="module">
  const datePicker = document.querySelector('gstock-week-picker');
  const value = document.querySelector('.output__value.value');
  const displayLabel = document.querySelector('.output__value.display-label');

  await Promise.all([customElements.whenDefined('gstock-week-picker')]).then(() => {
    value.innerText = datePicker.value;
    displayLabel.innerText = datePicker.displayLabel;

    datePicker.addEventListener('gstock-change-event', event => {
      console.info("Emitted event", event);
      const target = event.target;
      value.innerText = target.value;
      displayLabel.innerText = target.displayLabel;
    });
  });
</script>

Clear

Use the gstock-clear-event event to observe when the value was cleared. To emit this event enable the clearable attribute and press the clear button when the value is not empty.

  • Value:
  • Display Label:
<gstock-week-picker clearable label="Clear Event" date-format="YYYY/MM/DD" value="2024-12-31"></gstock-week-picker>

<ul class="output">
  <li><span class="output__key">Value: </span><code class="output__value value"></code></li>
  <li><span class="output__key">Display Label: </span><code class="output__value display-label"></code></li>
</ul>

<script type="module">
  const datePicker = document.querySelector('gstock-week-picker');
  const value = document.querySelector('.output__value.value');
  const displayLabel = document.querySelector('.output__value.display-label');

  await Promise.all([customElements.whenDefined('gstock-week-picker')]).then(() => {
    value.innerText = datePicker.value;
    displayLabel.innerText = datePicker.displayLabel;

    datePicker.addEventListener('gstock-clear-event', event => {
      console.info("Emitted event", event);
      const target = event.target;
      value.innerText = target.value;
      displayLabel.innerText = target.displayLabel;
    });

    datePicker.addEventListener('gstock-change-event', event => {
      const target = event.target;
      value.innerText = target.value;
      displayLabel.innerText = target.displayLabel;
    });
  });
</script>

Input

Use the gstock-input-event event to observe when the value was inputted. To emit this event select a date from the calendar picker.

  • Value:
  • Display Label:
<gstock-week-picker label="Input Event" date-format="YYYY/MM/DD"></gstock-week-picker>

<ul class="output">
  <li><span class="output__key">Value: </span><code class="output__value value"></code></li>
  <li><span class="output__key">Display Label: </span><code class="output__value display-label"></code></li>
</ul>

<script type="module">
  const datePicker = document.querySelector('gstock-week-picker');
  const value = document.querySelector('.output__value.value');
  const displayLabel = document.querySelector('.output__value.display-label');

  await Promise.all([customElements.whenDefined('gstock-week-picker')]).then(() => {
    value.innerText = datePicker.value;
    displayLabel.innerText = datePicker.displayLabel;

    datePicker.addEventListener('gstock-input-event', event => {
      console.info("Emitted event", event);
      const target = event.target;
      value.innerText = target.value;
      displayLabel.innerText = target.displayLabel;
    });
  });
</script>

Control de formulario

Campo obligatorio

Utilice el atributo required para que el valor del componente sea obligatorio.


Submit Reset
<form class="input-validation-required">
  <gstock-week-picker
    help-text="This field is required."
    label="Select a date"
    name="date"
    required></gstock-week-picker>
  <br />
  <gstock-button size="small" type="submit">Submit</gstock-button>
  <gstock-button size="small" variant="outlined"  type="reset">Reset</gstock-button>
</form>

<script type="module">
  const form = document.querySelector('.input-validation-required');

  await Promise.all([
    customElements.whenDefined('gstock-button'),
    customElements.whenDefined('gstock-week-picker'),
  ]).then(() => {
    form.addEventListener('submit', event => {
      event.preventDefault();
      const formData = JSON.stringify(Object.fromEntries(new FormData(form)));
      alert(`The field is valid!\n\n${formData}`);
    });
  });
</script>

Invalid date


Submit Reset
<form class="input-validation-invalid-date">
  <gstock-week-picker
    help-text="Show a validation error message when the value is invalid."
    label="Select a date"
    name="date"
    required
    value="INV@LID-DATE"></gstock-week-picker>
  <br />
  <gstock-button size="small" type="submit">Submit</gstock-button>
  <gstock-button size="small" variant="outlined"  type="reset">Reset</gstock-button>
</form>

<script type="module">
  const form = document.querySelector('.input-validation-invalid-date');
  const datePicker = form.querySelector('gstock-week-picker');

  await Promise.all([
    customElements.whenDefined('gstock-button'),
    customElements.whenDefined('gstock-week-picker'),
  ]).then(() => {
    form.addEventListener('submit', event => {
      event.preventDefault();
      const formData = JSON.stringify(Object.fromEntries(new FormData(form)));
      alert(`The field is valid!\n\n${formData}`);
    });
  });
</script>

Custom error messages

To create a custom validation error, pass a non-empty string to the setCustomValidity() method. This will override any existing validation constraints. To make the week-picker valid again, call setCustomValidity() again with an empty string.


Submit Reset
<form class="week-picker-validation-custom">
  <gstock-week-picker
    label="Select a date"
    name="date"
    required>
      <label slot="help-text">Select the <code>2024-12-31</code> date to make the week-picker valid.</label>
    </gstock-week-picker>
  <br />
  <gstock-button size="small" type="submit">Submit</gstock-button>
  <gstock-button size="small" variant="outlined"  type="reset">Reset</gstock-button>
</form>

<script type="module">
  const form = document.querySelector('.week-picker-validation-custom');
  const datePicker = form.querySelector('gstock-week-picker');

  await Promise.all([
    customElements.whenDefined('gstock-button'),
    customElements.whenDefined('gstock-week-picker'),
  ]).then(() => {
    form.addEventListener('submit', event => {
      event.preventDefault();
      const formData = JSON.stringify(Object.fromEntries(new FormData(form)));
      alert(`The field is valid!\n\n${formData}`);
    });

    datePicker.addEventListener('gstock-input-event', () => {
      if (datePicker.value === '2024-12-31') {
        datePicker.setCustomValidity('');
      } else {
        datePicker.setCustomValidity("You must select '2024-12-31' date before sending!");
      }
    });
  });
</script>

Styling validation

Use the validity-styles attribute to apply validation styles. These styles are applied only after a user interaction, such as typing or submitting.


Submit Reset
<form class="validity-styles">
  <gstock-week-picker
    help-text="This field is required."
    label="Select a date"
    name="date"
    required
    validity-styles></gstock-week-picker>
  <br />
  <gstock-button size="small" type="submit">Submit</gstock-button>
  <gstock-button size="small" variant="outlined"  type="reset">Reset</gstock-button>
</form>

<script type="module">
  const form = document.querySelector('.validity-styles');

  await Promise.all([
    customElements.whenDefined('gstock-button'),
    customElements.whenDefined('gstock-week-picker'),
  ]).then(() => {
    form.addEventListener('submit', event => {
      event.preventDefault();
      const formData = JSON.stringify(Object.fromEntries(new FormData(form)));
      alert(`The field is valid!\n\n${formData}`);
    });
  });
</script>

Inline validation

To disable the browsers error messages, you need to cancel the gstock-invalid-event event. Then you can apply your own inline validation errors.



Submit Reset
<form class="inline-validation">
  <gstock-week-picker
    help-text="This field is required."
    label="Select a date"
    name="date"
    required
    validity-styles></gstock-week-picker>
  <br />
  <div id="error-message" aria-live="polite" hidden></div>
  <br />
  <gstock-button size="small" type="submit">Submit</gstock-button>
  <gstock-button size="small" variant="outlined"  type="reset">Reset</gstock-button>
</form>

<script type="module">
  const form = document.querySelector('.inline-validation');
  const errorMessage = document.querySelector('#error-message');

  await Promise.all([
    customElements.whenDefined('gstock-button'),
    customElements.whenDefined('gstock-week-picker'),
  ]).then(() => {
    form.addEventListener(
      'gstock-invalid-event',
      event => {
        event.preventDefault();
        errorMessage.textContent = `Error: ${event.target.validationMessage}`;
        errorMessage.hidden = false;
        event.target.focus();
      },
      { capture: true },
    );

    form.addEventListener('submit', event => {
      event.preventDefault();
      errorMessage.hidden = true;
      errorMessage.textContent = '';

      setTimeout(() => {
        const formData = JSON.stringify(Object.fromEntries(new FormData(form)));
        alert(`The field is valid!\n\n${formData}`);
      }, 50);
    });

    form.addEventListener('reset', () => {
      errorMessage.hidden = true;
      errorMessage.textContent = '';
    });
  });
</script>