@invopop/popui 0.1.33 → 0.1.35

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.
@@ -2,13 +2,19 @@
2
2
  import clsx from 'clsx'
3
3
  import type { ProgressBarProps } from './types'
4
4
 
5
- let { percentage = 0, current = 0, total = 0, allowOverage = true }: ProgressBarProps = $props()
5
+ let {
6
+ percentage = 0,
7
+ current = 0,
8
+ total = 0,
9
+ allowOverage = true,
10
+ warningPercentage = 80
11
+ }: ProgressBarProps = $props()
6
12
 
7
13
  let isOverage = $derived(current > total && allowOverage)
8
14
  let overagePercentage = $derived(isOverage && total > 0 ? ((current - total) / current) * 100 : 0)
9
15
  let usedPercentage = $derived(isOverage ? 100 - overagePercentage : percentage)
10
16
  let isCritical = $derived(percentage >= 100 || (current > total && !allowOverage))
11
- let isWarning = $derived(percentage >= 80 && percentage < 100)
17
+ let isWarning = $derived(percentage >= warningPercentage && percentage < 100)
12
18
 
13
19
  let barColor = $derived(
14
20
  clsx({
@@ -0,0 +1,46 @@
1
+ <script lang="ts">
2
+ import type { ProgressBarCircleProps } from './types'
3
+
4
+ let { progress, size, variant = 'default' }: ProgressBarCircleProps = $props()
5
+
6
+ let angle = $derived(360 * progress)
7
+ let filledColor = $derived(
8
+ variant === 'dark' ? 'var(--color-icon-inverse-bold)' : 'var(--color-icon-selected-default)'
9
+ )
10
+ let restColor = $derived(
11
+ variant === 'dark'
12
+ ? 'var(--color-background-selected-inverse-hover)'
13
+ : 'var(--color-background-default-tertiary)'
14
+ )
15
+ let background = $derived(
16
+ `conic-gradient(${filledColor} 0deg ${angle}deg, ${restColor} ${angle}deg 360deg)`
17
+ )
18
+ let cssVarStyles = $derived(`--background:${background}; --size: ${size}px; --ring: 1.5px;`)
19
+ </script>
20
+
21
+ <div id="progress-circle" style={cssVarStyles}></div>
22
+
23
+ <style>
24
+ #progress-circle {
25
+ background: var(--background);
26
+ -webkit-mask: radial-gradient(
27
+ circle,
28
+ transparent 0,
29
+ transparent calc(50% - var(--ring)),
30
+ black calc(50% - var(--ring)),
31
+ black 100%
32
+ );
33
+ mask: radial-gradient(
34
+ circle,
35
+ transparent 0,
36
+ transparent calc(50% - var(--ring)),
37
+ black calc(50% - var(--ring)),
38
+ black 100%
39
+ );
40
+ border-radius: 50%;
41
+ width: var(--size);
42
+ height: var(--size);
43
+ transition: all 500ms ease-in;
44
+ will-change: transform;
45
+ }
46
+ </style>
@@ -0,0 +1,4 @@
1
+ import type { ProgressBarCircleProps } from './types';
2
+ declare const ProgressBarCircle: import("svelte").Component<ProgressBarCircleProps, {}, "">;
3
+ type ProgressBarCircle = ReturnType<typeof ProgressBarCircle>;
4
+ export default ProgressBarCircle;
@@ -4,8 +4,8 @@
4
4
  .hr-separator {
5
5
  border-image: repeating-linear-gradient(
6
6
  90deg,
7
- var(--color-border-default-default),
8
- var(--color-border-default-default) 3px,
7
+ var(--color-border-default-secondary),
8
+ var(--color-border-default-secondary) 3px,
9
9
  transparent 3px,
10
10
  transparent 7px
11
11
  );
@@ -0,0 +1,28 @@
1
+ <script lang="ts">
2
+ import clsx from 'clsx'
3
+ import ProgressBarCircle from './ProgressBarCircle.svelte'
4
+ import type { TagProgressProps } from './types'
5
+
6
+ let { progress, variant = 'default' }: TagProgressProps = $props()
7
+
8
+ let percentage = $derived(Math.round(progress * 100))
9
+
10
+ let containerStyles = $derived(
11
+ clsx('inline-flex items-center gap-1 rounded-full overflow-hidden pl-0.5 pr-1 py-0.5', {
12
+ 'bg-background-selected-inverse': variant === 'dark',
13
+ 'bg-background-default-secondary': variant === 'default'
14
+ })
15
+ )
16
+
17
+ let textStyles = $derived(
18
+ clsx('text-sm font-medium leading-4 whitespace-nowrap', {
19
+ 'text-foreground-inverse-default': variant === 'dark',
20
+ 'text-foreground-default-default': variant === 'default'
21
+ })
22
+ )
23
+ </script>
24
+
25
+ <div class={containerStyles}>
26
+ <ProgressBarCircle {progress} size={16} {variant} />
27
+ <span class={textStyles}>{percentage}%</span>
28
+ </div>
@@ -0,0 +1,4 @@
1
+ import type { TagProgressProps } from './types';
2
+ declare const TagProgress: import("svelte").Component<TagProgressProps, {}, "">;
3
+ type TagProgress = ReturnType<typeof TagProgress>;
4
+ export default TagProgress;
package/dist/index.d.ts CHANGED
@@ -42,6 +42,7 @@ import MenuItemCollapsible from './MenuItemCollapsible.svelte';
42
42
  import Notification from './Notification.svelte';
43
43
  import ProfileAvatar from './ProfileAvatar.svelte';
44
44
  import ProgressBar from './ProgressBar.svelte';
45
+ import ProgressBarCircle from './ProgressBarCircle.svelte';
45
46
  import SeparatorHorizontal from './SeparatorHorizontal.svelte';
46
47
  import ShortcutWrapper from './ShortcutWrapper.svelte';
47
48
  import StatusLabel from './StatusLabel.svelte';
@@ -59,6 +60,7 @@ import { TabsContent } from './tabs';
59
60
  import { TabsList } from './tabs';
60
61
  import { TabsTrigger } from './tabs';
61
62
  import TagBeta from './TagBeta.svelte';
63
+ import TagProgress from './TagProgress.svelte';
62
64
  import TagSearch from './TagSearch.svelte';
63
65
  import TagStatus from './TagStatus.svelte';
64
66
  import TitleMain from './TitleMain.svelte';
@@ -72,4 +74,4 @@ import { resolveIcon } from './helpers.js';
72
74
  import { getCountryName } from './helpers.js';
73
75
  import { getStatusType } from './helpers.js';
74
76
  import { buttonVariants } from './button/button.svelte';
75
- export { AlertDialog, BaseButton, BaseCard, BaseCounter, BaseDropdown, BaseFlag, BaseTable, BaseTableActions, BaseTableHeaderContent, Breadcrumbs, ButtonFile, ButtonUuidCopy, CardCheckbox, CardRelation, CompanySelector, CounterWidget, DataListItem, DatePicker, DrawerContext, DrawerContextItem, DrawerContextSeparator, DropdownSelect, EmptyState, FeedEvents, FeedIconEvent, FeedIconStatus, FeedItem, FeedItemDetail, FeedViewer, GlobalSearch, InputCheckbox, InputError, InputLabel, InputRadio, InputSearch, InputSelect, InputText, InputTextarea, InputToggle, MenuItem, MenuItemCollapsible, Notification, ProfileAvatar, ProgressBar, SeparatorHorizontal, ShortcutWrapper, StatusLabel, StepIconList, Table, TableBody, TableCaption, TableFooter, TableHeader, TableRow, TableHead, TableCell, Tabs, TabsContent, TabsList, TabsTrigger, TagBeta, TagSearch, TagStatus, TitleMain, TitleSection, Toaster, Tooltip, TooltipContent, TooltipTrigger, UuidCopy, resolveIcon, getCountryName, getStatusType, buttonVariants };
77
+ export { AlertDialog, BaseButton, BaseCard, BaseCounter, BaseDropdown, BaseFlag, BaseTable, BaseTableActions, BaseTableHeaderContent, Breadcrumbs, ButtonFile, ButtonUuidCopy, CardCheckbox, CardRelation, CompanySelector, CounterWidget, DataListItem, DatePicker, DrawerContext, DrawerContextItem, DrawerContextSeparator, DropdownSelect, EmptyState, FeedEvents, FeedIconEvent, FeedIconStatus, FeedItem, FeedItemDetail, FeedViewer, GlobalSearch, InputCheckbox, InputError, InputLabel, InputRadio, InputSearch, InputSelect, InputText, InputTextarea, InputToggle, MenuItem, MenuItemCollapsible, Notification, ProfileAvatar, ProgressBar, ProgressBarCircle, SeparatorHorizontal, ShortcutWrapper, StatusLabel, StepIconList, Table, TableBody, TableCaption, TableFooter, TableHeader, TableRow, TableHead, TableCell, Tabs, TabsContent, TabsList, TabsTrigger, TagBeta, TagProgress, TagSearch, TagStatus, TitleMain, TitleSection, Toaster, Tooltip, TooltipContent, TooltipTrigger, UuidCopy, resolveIcon, getCountryName, getStatusType, buttonVariants };
package/dist/index.js CHANGED
@@ -42,6 +42,7 @@ import MenuItemCollapsible from './MenuItemCollapsible.svelte'
42
42
  import Notification from './Notification.svelte'
43
43
  import ProfileAvatar from './ProfileAvatar.svelte'
44
44
  import ProgressBar from './ProgressBar.svelte'
45
+ import ProgressBarCircle from './ProgressBarCircle.svelte'
45
46
  import SeparatorHorizontal from './SeparatorHorizontal.svelte'
46
47
  import ShortcutWrapper from './ShortcutWrapper.svelte'
47
48
  import StatusLabel from './StatusLabel.svelte'
@@ -58,6 +59,7 @@ import {
58
59
  } from './table'
59
60
  import { Tabs, TabsContent, TabsList, TabsTrigger } from './tabs'
60
61
  import TagBeta from './TagBeta.svelte'
62
+ import TagProgress from './TagProgress.svelte'
61
63
  import TagSearch from './TagSearch.svelte'
62
64
  import TagStatus from './TagStatus.svelte'
63
65
  import TitleMain from './TitleMain.svelte'
@@ -113,6 +115,7 @@ export {
113
115
  Notification,
114
116
  ProfileAvatar,
115
117
  ProgressBar,
118
+ ProgressBarCircle,
116
119
  SeparatorHorizontal,
117
120
  ShortcutWrapper,
118
121
  StatusLabel,
@@ -130,6 +133,7 @@ export {
130
133
  TabsList,
131
134
  TabsTrigger,
132
135
  TagBeta,
136
+ TagProgress,
133
137
  TagSearch,
134
138
  TagStatus,
135
139
  TitleMain,
package/dist/types.d.ts CHANGED
@@ -199,6 +199,16 @@ export interface ProgressBarProps {
199
199
  current?: number;
200
200
  total?: number;
201
201
  allowOverage?: boolean;
202
+ warningPercentage?: number;
203
+ }
204
+ export interface ProgressBarCircleProps {
205
+ progress: number;
206
+ size: number;
207
+ variant?: 'default' | 'dark';
208
+ }
209
+ export interface TagProgressProps {
210
+ progress: number;
211
+ variant?: 'default' | 'dark';
202
212
  }
203
213
  export interface BaseDropdownProps {
204
214
  isOpen?: boolean;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@invopop/popui",
3
3
  "license": "MIT",
4
- "version": "0.1.33",
4
+ "version": "0.1.35",
5
5
  "scripts": {
6
6
  "dev": "vite dev",
7
7
  "dev:clean": "npm run clean && vite dev",