Примитивы
24

Progress

Полоса с известным прогрессом. Число указывается один раз и отрисовывается дважды из одного источника: элемент несёт --aura-value, стили превращают его в ширину, а aria-valuenow сообщает то же самое. Значения зажимаются: полоса за собственный край — баг, который вызывающий не должен увидеть.

чистая разметка — библиотеки на странице нет
отрендерил aura-react
отрендерил aura-vue
отрендерил aura-svelte
собрано из классов самого aura-angular

Код

index.html
<div class="aura-stack" style="--aura-dir:column;--aura-gap:var(--space-3);min-width:320px;">
  <div role="progressbar" aria-valuenow="64" aria-valuemin="0" aria-valuemax="100" aria-label="Upload" class="aura-progress">
    <div class="aura-progress__fill" style="--aura-value:64"></div>
  </div>
  <div role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" aria-label="Overshoot, clamped to 100" class="aura-progress">
    <div class="aura-progress__fill" style="--aura-value:100"></div>
  </div>
</div>
Demo.tsx
import { Progress, Stack } from '@ilomee/aura-react';

/**
 * `minWidth` — так же, как в демо Field и Select. Полоса имеет `width: 100%`, а панель превью —
 * flex-строка, сжимающаяся по содержимому: процент от родителя, у которого своей ширины нет,
 * разрешается в ничто, поэтому демо рисовало две полосы шириной 0px и выглядело пустой сценой. На
 * странице всегда есть что заполнять, превью это нужно задать.
 */
export default function Demo() {
  return (
    <Stack gap={3} style={{ minWidth: 320 }}>
      <Progress value={64} label="Upload" />
      {/* Значение зажимается: полоса не рисуется за собственный край. */}
      <Progress value={140} label="Overshoot, clamped to 100" />
    </Stack>
  );
}
Demo.vue
<script setup lang="ts">
import { Progress } from '@ilomee/aura-vue';
</script>

<template>
  <Progress :value="64" label="Upload" />
</template>
Demo.svelte
<script lang="ts">
  import { Progress } from '@ilomee/aura-svelte';
</script>

<Progress value={64} label="Upload" />

Используется как aura-progress.

demo.component.ts
import { AuraProgress } from '@ilomee/aura-angular';

@Component({
  standalone: true,
  imports: [AuraProgress],
  template: `<aura-progress [value]="64" label="Upload" />`,
})
export class DemoComponent {}

Пропсы

У чистой разметки нет пропсов — классы ниже и есть весь API. Четыре пакета не делают ничего сверх того, что проставляют вам те же самые классы.
ИмяТипПо умолчаниюПримечания
valuenumber00–100, зажимается.
labelstring
ИмяТипПо умолчаниюПримечания
valuenumber0
labelstring
ИмяТипПо умолчаниюПримечания
valuenumber0
labelstring
ИмяТипПо умолчаниюПримечания
valuenumber0
labelstring

Какие классы отдаёт

Все фреймворки отдают одни и те же классы — именно поэтому четыре библиотеки выглядят одинаково. Их можно использовать напрямую, вообще без библиотеки компонентов.

КлассРольПримечания
.aura-progressбазаОбязательный. Без него модификатор не работает.
.aura-progress__fillэлемент

Токены и правила

components.css
высота
var(--progress-h)
дорожка
var(--surface-3)
заливка
var(--gradient) · width: calc(var(--aura-value) * 1%)