Примитивы
31

RingProgress

Детерминированное кольцо — та же роль progressbar, что у Progress, но нарисованная одним conic-gradient, без SVG. label даёт ему имя, а дети заполняют середину: кольцо с надписью «70%» всё ещё обязано сказать, чего именно 70%.

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

Код

index.html
<div
  class="aura-ring"
  role="progressbar"
  aria-valuenow="70"
  aria-valuemin="0"
  aria-valuemax="100"
  aria-label="Storage used"
  style="--aura-ring:70"
>
  <span class="aura-ring__label">70%</span>
</div>
Demo.tsx
import { RingProgress } from '@ilomee/aura-react';

/**
 * Повторяет html-сниппет `ring-progress` из реестра: именно с ним сравнивают все стеки.
 */
export default function Demo() {
  return (
    <RingProgress value={70} label="Storage used">
      70%
    </RingProgress>
  );
}
Demo.vue
<script setup lang="ts">
import { RingProgress } from '@ilomee/aura-vue';
</script>

<template>
  <RingProgress :value="70" label="Storage used">70%</RingProgress>
</template>
Demo.svelte
<script lang="ts">
  import { RingProgress } from '@ilomee/aura-svelte';
</script>

<RingProgress value={70} label="Storage used">70%</RingProgress>

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

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

@Component({
  standalone: true,
  imports: [AuraRingProgress],
  template: `<aura-ring-progress [value]="70" label="Storage used">70%</aura-ring-progress>`,
})
export class DemoComponent {}

Пропсы

У чистой разметки нет пропсов — классы ниже и есть весь API. Четыре пакета не делают ничего сверх того, что проставляют вам те же самые классы.
ИмяТипПо умолчаниюПримечания
valuenumber00–100. Кламп: кольцо за собственным концом — баг, который не должен доходить до вызывающего.
labelstringИмя кольца для скринридера. Это не видимый текст в центре — тот приходит через children.
childrenслотReactNodeСодержимое центра. Спан рендерится даже пустым, чтобы все четыре стека давали одинаковый DOM: Angular не умеет определить пустую проекцию.
ИмяТипПо умолчаниюПримечания
valuenumber0
labelstring
defaultслотslot
ИмяТипПо умолчаниюПримечания
valuenumber0
labelstring
childrenслотSnippet
ИмяТипПо умолчаниюПримечания
valuenumber0
labelstring
ng-contentслотcontent

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

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

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

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

components.css
дуга
conic-gradient(var(--accent) calc(var(--aura-ring) * 1%), var(--surface-3) 0)
размер
var(--avatar-lg)
толщина
var(--ring-thickness) — the middle is punched out by ::before
анимация
@property --aura-ring — without it the angle jumps instead of animating