fluentui-svelte 0.1.0

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.
Files changed (283) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +201 -0
  3. package/dist/components/auto-suggest-box/auto-suggest-box.d.ts +2 -0
  4. package/dist/components/auto-suggest-box/auto-suggest-box.js +2 -0
  5. package/dist/components/auto-suggest-box/auto-suggest-box.svelte +457 -0
  6. package/dist/components/auto-suggest-box/auto-suggest-box.svelte.d.ts +4 -0
  7. package/dist/components/auto-suggest-box/docs/llms.md +73 -0
  8. package/dist/components/auto-suggest-box/option.svelte +82 -0
  9. package/dist/components/auto-suggest-box/option.svelte.d.ts +4 -0
  10. package/dist/components/auto-suggest-box/types.d.ts +140 -0
  11. package/dist/components/auto-suggest-box/types.js +1 -0
  12. package/dist/components/avatar/avatar.svelte +269 -0
  13. package/dist/components/avatar/avatar.svelte.d.ts +20 -0
  14. package/dist/components/avatar/docs/llms.md +92 -0
  15. package/dist/components/avatar/type.d.ts +63 -0
  16. package/dist/components/avatar/type.js +1 -0
  17. package/dist/components/badge/badge-icon.svelte +103 -0
  18. package/dist/components/badge/badge-icon.svelte.d.ts +25 -0
  19. package/dist/components/badge/badge.svelte +163 -0
  20. package/dist/components/badge/badge.svelte.d.ts +20 -0
  21. package/dist/components/badge/docs/llms.md +133 -0
  22. package/dist/components/badge/types.d.ts +70 -0
  23. package/dist/components/badge/types.js +1 -0
  24. package/dist/components/badge/utils.svelte.d.ts +16 -0
  25. package/dist/components/badge/utils.svelte.js +35 -0
  26. package/dist/components/button/button.svelte +203 -0
  27. package/dist/components/button/button.svelte.d.ts +38 -0
  28. package/dist/components/button/docs/llms.md +102 -0
  29. package/dist/components/button/split-button.svelte +66 -0
  30. package/dist/components/button/split-button.svelte.d.ts +4 -0
  31. package/dist/components/button/types.d.ts +84 -0
  32. package/dist/components/button/types.js +1 -0
  33. package/dist/components/calendar-date-picker/calendar-date-picker.svelte +119 -0
  34. package/dist/components/calendar-date-picker/calendar-date-picker.svelte.d.ts +4 -0
  35. package/dist/components/calendar-date-picker/docs/llms.md +33 -0
  36. package/dist/components/calendar-date-picker/types.d.ts +36 -0
  37. package/dist/components/calendar-date-picker/types.js +1 -0
  38. package/dist/components/calendar-view/calendar-view-controls.svelte +115 -0
  39. package/dist/components/calendar-view/calendar-view-controls.svelte.d.ts +3 -0
  40. package/dist/components/calendar-view/calendar-view-days.svelte +210 -0
  41. package/dist/components/calendar-view/calendar-view-days.svelte.d.ts +3 -0
  42. package/dist/components/calendar-view/calendar-view-grid.d.ts +38 -0
  43. package/dist/components/calendar-view/calendar-view-grid.js +140 -0
  44. package/dist/components/calendar-view/calendar-view-header.svelte +66 -0
  45. package/dist/components/calendar-view/calendar-view-header.svelte.d.ts +18 -0
  46. package/dist/components/calendar-view/calendar-view-item.svelte +181 -0
  47. package/dist/components/calendar-view/calendar-view-item.svelte.d.ts +4 -0
  48. package/dist/components/calendar-view/calendar-view-months.svelte +165 -0
  49. package/dist/components/calendar-view/calendar-view-months.svelte.d.ts +3 -0
  50. package/dist/components/calendar-view/calendar-view-years.svelte +161 -0
  51. package/dist/components/calendar-view/calendar-view-years.svelte.d.ts +3 -0
  52. package/dist/components/calendar-view/calendar-view.svelte +451 -0
  53. package/dist/components/calendar-view/calendar-view.svelte.d.ts +9 -0
  54. package/dist/components/calendar-view/calendar-view.svelte.js +196 -0
  55. package/dist/components/calendar-view/docs/llms.md +121 -0
  56. package/dist/components/calendar-view/index.d.ts +1 -0
  57. package/dist/components/calendar-view/index.js +1 -0
  58. package/dist/components/calendar-view/types.d.ts +174 -0
  59. package/dist/components/calendar-view/types.js +1 -0
  60. package/dist/components/checkbox/checkbox.svelte +171 -0
  61. package/dist/components/checkbox/checkbox.svelte.d.ts +40 -0
  62. package/dist/components/checkbox/docs/llms.md +78 -0
  63. package/dist/components/checkbox/types.d.ts +50 -0
  64. package/dist/components/checkbox/types.js +1 -0
  65. package/dist/components/date-picker/date-picker.svelte +381 -0
  66. package/dist/components/date-picker/date-picker.svelte.d.ts +4 -0
  67. package/dist/components/date-picker/docs/llms.md +52 -0
  68. package/dist/components/date-picker/index.d.ts +1 -0
  69. package/dist/components/date-picker/index.js +1 -0
  70. package/dist/components/date-picker/types.d.ts +74 -0
  71. package/dist/components/date-picker/types.js +1 -0
  72. package/dist/components/dialog/dialog-actions.svelte +37 -0
  73. package/dist/components/dialog/dialog-actions.svelte.d.ts +4 -0
  74. package/dist/components/dialog/dialog-content.svelte +17 -0
  75. package/dist/components/dialog/dialog-content.svelte.d.ts +4 -0
  76. package/dist/components/dialog/dialog-surface.svelte +95 -0
  77. package/dist/components/dialog/dialog-surface.svelte.d.ts +4 -0
  78. package/dist/components/dialog/dialog-title.svelte +33 -0
  79. package/dist/components/dialog/dialog-title.svelte.d.ts +25 -0
  80. package/dist/components/dialog/dialog-trigger.svelte +23 -0
  81. package/dist/components/dialog/dialog-trigger.svelte.d.ts +4 -0
  82. package/dist/components/dialog/dialog.svelte +64 -0
  83. package/dist/components/dialog/dialog.svelte.d.ts +7 -0
  84. package/dist/components/dialog/dialog.svelte.js +2 -0
  85. package/dist/components/dialog/docs/llms.md +131 -0
  86. package/dist/components/dialog/types.d.ts +92 -0
  87. package/dist/components/dialog/types.js +1 -0
  88. package/dist/components/divider/divider.svelte +120 -0
  89. package/dist/components/divider/divider.svelte.d.ts +39 -0
  90. package/dist/components/divider/docs/llms.md +83 -0
  91. package/dist/components/divider/types.d.ts +32 -0
  92. package/dist/components/divider/types.js +1 -0
  93. package/dist/components/dropdown/docs/llms.md +70 -0
  94. package/dist/components/dropdown/dropdown-context.d.ts +2 -0
  95. package/dist/components/dropdown/dropdown-context.js +2 -0
  96. package/dist/components/dropdown/dropdown-option.svelte +31 -0
  97. package/dist/components/dropdown/dropdown-option.svelte.d.ts +4 -0
  98. package/dist/components/dropdown/dropdown.svelte +309 -0
  99. package/dist/components/dropdown/dropdown.svelte.d.ts +4 -0
  100. package/dist/components/dropdown/types.d.ts +82 -0
  101. package/dist/components/dropdown/types.js +1 -0
  102. package/dist/components/dropdown-select/docs/llms.md +72 -0
  103. package/dist/components/dropdown-select/dropdown-select-option.svelte +87 -0
  104. package/dist/components/dropdown-select/dropdown-select-option.svelte.d.ts +4 -0
  105. package/dist/components/dropdown-select/dropdown-select.svelte +165 -0
  106. package/dist/components/dropdown-select/dropdown-select.svelte.d.ts +4 -0
  107. package/dist/components/dropdown-select/dropdown-select.svelte.js +48 -0
  108. package/dist/components/dropdown-select/index.d.ts +2 -0
  109. package/dist/components/dropdown-select/index.js +2 -0
  110. package/dist/components/dropdown-select/types.d.ts +46 -0
  111. package/dist/components/dropdown-select/types.js +1 -0
  112. package/dist/components/expander/docs/llms.md +88 -0
  113. package/dist/components/expander/expander.svelte +249 -0
  114. package/dist/components/expander/expander.svelte.d.ts +21 -0
  115. package/dist/components/expander/types.d.ts +47 -0
  116. package/dist/components/expander/types.js +1 -0
  117. package/dist/components/flyout/docs/llms.md +31 -0
  118. package/dist/components/flyout/flyout.svelte +148 -0
  119. package/dist/components/flyout/flyout.svelte.d.ts +19 -0
  120. package/dist/components/flyout/types.d.ts +36 -0
  121. package/dist/components/flyout/types.js +1 -0
  122. package/dist/components/hyperlink/docs/llms.md +33 -0
  123. package/dist/components/hyperlink/hyperlink.svelte +66 -0
  124. package/dist/components/hyperlink/hyperlink.svelte.d.ts +16 -0
  125. package/dist/components/hyperlink/types.d.ts +14 -0
  126. package/dist/components/hyperlink/types.js +1 -0
  127. package/dist/components/info-bar/docs/llms.md +81 -0
  128. package/dist/components/info-bar/info-bar.svelte +140 -0
  129. package/dist/components/info-bar/info-bar.svelte.d.ts +19 -0
  130. package/dist/components/info-bar/types.d.ts +27 -0
  131. package/dist/components/info-bar/types.js +1 -0
  132. package/dist/components/label/docs/llms.md +67 -0
  133. package/dist/components/label/label.svelte +95 -0
  134. package/dist/components/label/label.svelte.d.ts +4 -0
  135. package/dist/components/label/types.d.ts +32 -0
  136. package/dist/components/label/types.js +1 -0
  137. package/dist/components/list-view/docs/llms.md +110 -0
  138. package/dist/components/list-view/list-view-item.svelte +168 -0
  139. package/dist/components/list-view/list-view-item.svelte.d.ts +25 -0
  140. package/dist/components/list-view/list-view.svelte +137 -0
  141. package/dist/components/list-view/list-view.svelte.d.ts +25 -0
  142. package/dist/components/list-view/types.d.ts +95 -0
  143. package/dist/components/list-view/types.js +1 -0
  144. package/dist/components/list-view/utils.d.ts +6 -0
  145. package/dist/components/list-view/utils.js +12 -0
  146. package/dist/components/menu/context-menu-trigger.svelte +84 -0
  147. package/dist/components/menu/context-menu-trigger.svelte.d.ts +9 -0
  148. package/dist/components/menu/docs/llms.md +169 -0
  149. package/dist/components/menu/menu-divider.svelte +9 -0
  150. package/dist/components/menu/menu-divider.svelte.d.ts +26 -0
  151. package/dist/components/menu/menu-group.svelte +31 -0
  152. package/dist/components/menu/menu-group.svelte.d.ts +4 -0
  153. package/dist/components/menu/menu-item-checkbox.svelte +143 -0
  154. package/dist/components/menu/menu-item-checkbox.svelte.d.ts +15 -0
  155. package/dist/components/menu/menu-item-radio.svelte +147 -0
  156. package/dist/components/menu/menu-item-radio.svelte.d.ts +15 -0
  157. package/dist/components/menu/menu-item-switch.svelte +194 -0
  158. package/dist/components/menu/menu-item-switch.svelte.d.ts +15 -0
  159. package/dist/components/menu/menu-item.svelte +124 -0
  160. package/dist/components/menu/menu-item.svelte.d.ts +18 -0
  161. package/dist/components/menu/menu-list.svelte +38 -0
  162. package/dist/components/menu/menu-list.svelte.d.ts +5 -0
  163. package/dist/components/menu/menu-popover.svelte +125 -0
  164. package/dist/components/menu/menu-popover.svelte.d.ts +12 -0
  165. package/dist/components/menu/menu-trigger.svelte +121 -0
  166. package/dist/components/menu/menu-trigger.svelte.d.ts +4 -0
  167. package/dist/components/menu/menu.svelte +124 -0
  168. package/dist/components/menu/menu.svelte.d.ts +4 -0
  169. package/dist/components/menu/menu.svelte.js +77 -0
  170. package/dist/components/menu/types.d.ts +127 -0
  171. package/dist/components/menu/types.js +1 -0
  172. package/dist/components/number-box/docs/llms.md +37 -0
  173. package/dist/components/number-box/number-box.svelte +115 -0
  174. package/dist/components/number-box/number-box.svelte.d.ts +15 -0
  175. package/dist/components/number-box/types.d.ts +16 -0
  176. package/dist/components/number-box/types.js +1 -0
  177. package/dist/components/persona/docs/llms.md +107 -0
  178. package/dist/components/persona/persona.svelte +79 -0
  179. package/dist/components/persona/persona.svelte.d.ts +4 -0
  180. package/dist/components/persona/types.d.ts +42 -0
  181. package/dist/components/persona/types.js +1 -0
  182. package/dist/components/progress-bar/docs/llms.md +67 -0
  183. package/dist/components/progress-bar/progress-bar.svelte +167 -0
  184. package/dist/components/progress-bar/progress-bar.svelte.d.ts +15 -0
  185. package/dist/components/progress-bar/types.d.ts +39 -0
  186. package/dist/components/progress-bar/types.js +1 -0
  187. package/dist/components/progress-ring/docs/llms.md +76 -0
  188. package/dist/components/progress-ring/progress-ring.svelte +145 -0
  189. package/dist/components/progress-ring/progress-ring.svelte.d.ts +15 -0
  190. package/dist/components/progress-ring/types.d.ts +42 -0
  191. package/dist/components/progress-ring/types.js +1 -0
  192. package/dist/components/radio-button/docs/llms.md +64 -0
  193. package/dist/components/radio-button/radio-button.svelte +129 -0
  194. package/dist/components/radio-button/radio-button.svelte.d.ts +19 -0
  195. package/dist/components/radio-button/types.d.ts +24 -0
  196. package/dist/components/radio-button/types.js +1 -0
  197. package/dist/components/skeleton/docs/llms.md +67 -0
  198. package/dist/components/skeleton/skeleton.svelte +106 -0
  199. package/dist/components/skeleton/skeleton.svelte.d.ts +39 -0
  200. package/dist/components/skeleton/types.d.ts +24 -0
  201. package/dist/components/skeleton/types.js +1 -0
  202. package/dist/components/slider/docs/llms.md +75 -0
  203. package/dist/components/slider/slider.svelte +486 -0
  204. package/dist/components/slider/slider.svelte.d.ts +19 -0
  205. package/dist/components/slider/types.d.ts +102 -0
  206. package/dist/components/slider/types.js +1 -0
  207. package/dist/components/text-box/docs/llms.md +86 -0
  208. package/dist/components/text-box/text-box-button.svelte +65 -0
  209. package/dist/components/text-box/text-box-button.svelte.d.ts +9 -0
  210. package/dist/components/text-box/text-box.svelte +299 -0
  211. package/dist/components/text-box/text-box.svelte.d.ts +16 -0
  212. package/dist/components/text-box/types.d.ts +60 -0
  213. package/dist/components/text-box/types.js +1 -0
  214. package/dist/components/textarea/docs/llms.md +55 -0
  215. package/dist/components/textarea/textarea.svelte +151 -0
  216. package/dist/components/textarea/textarea.svelte.d.ts +17 -0
  217. package/dist/components/textarea/types.d.ts +33 -0
  218. package/dist/components/textarea/types.js +1 -0
  219. package/dist/components/time-picker/docs/llms.md +47 -0
  220. package/dist/components/time-picker/index.d.ts +1 -0
  221. package/dist/components/time-picker/index.js +1 -0
  222. package/dist/components/time-picker/time-picker.svelte +336 -0
  223. package/dist/components/time-picker/time-picker.svelte.d.ts +4 -0
  224. package/dist/components/time-picker/types.d.ts +54 -0
  225. package/dist/components/time-picker/types.js +1 -0
  226. package/dist/components/toggle-switch/docs/llms.md +39 -0
  227. package/dist/components/toggle-switch/toggle-switch.svelte +151 -0
  228. package/dist/components/toggle-switch/toggle-switch.svelte.d.ts +17 -0
  229. package/dist/components/toggle-switch/types.d.ts +20 -0
  230. package/dist/components/toggle-switch/types.js +1 -0
  231. package/dist/components/tooltip/docs/llms.md +74 -0
  232. package/dist/components/tooltip/tooltip.svelte +246 -0
  233. package/dist/components/tooltip/tooltip.svelte.d.ts +18 -0
  234. package/dist/components/tooltip/types.d.ts +67 -0
  235. package/dist/components/tooltip/types.js +1 -0
  236. package/dist/components/tree-view/docs/llms.md +117 -0
  237. package/dist/components/tree-view/tree-view-item-content.svelte +158 -0
  238. package/dist/components/tree-view/tree-view-item-content.svelte.d.ts +4 -0
  239. package/dist/components/tree-view/tree-view-item.svelte +197 -0
  240. package/dist/components/tree-view/tree-view-item.svelte.d.ts +4 -0
  241. package/dist/components/tree-view/tree-view.svelte +220 -0
  242. package/dist/components/tree-view/tree-view.svelte.d.ts +4 -0
  243. package/dist/components/tree-view/tree-view.svelte.js +111 -0
  244. package/dist/components/tree-view/types.d.ts +185 -0
  245. package/dist/components/tree-view/types.js +1 -0
  246. package/dist/css/class-darkmode.css +186 -0
  247. package/dist/css/media-darkmode.css +189 -0
  248. package/dist/css/reset.css +53 -0
  249. package/dist/css/theme.css +276 -0
  250. package/dist/css/typography.css +67 -0
  251. package/dist/css/utils.d.ts +1 -0
  252. package/dist/css/utils.js +153 -0
  253. package/dist/index.d.ts +63 -0
  254. package/dist/index.js +129 -0
  255. package/dist/internal/components/dynamic-carousel/dynamic-carousel.svelte +449 -0
  256. package/dist/internal/components/dynamic-carousel/dynamic-carousel.svelte.d.ts +22 -0
  257. package/dist/internal/components/render-soc/render-soc.svelte +29 -0
  258. package/dist/internal/components/render-soc/render-soc.svelte.d.ts +30 -0
  259. package/dist/internal/constants.d.ts +26 -0
  260. package/dist/internal/constants.js +4036 -0
  261. package/dist/internal/context.d.ts +14 -0
  262. package/dist/internal/context.js +13 -0
  263. package/dist/internal/dom-utils.svelte.d.ts +6 -0
  264. package/dist/internal/dom-utils.svelte.js +46 -0
  265. package/dist/internal/floating-ui/floating.svelte.d.ts +15 -0
  266. package/dist/internal/floating-ui/floating.svelte.js +26 -0
  267. package/dist/internal/floating-ui/utils.d.ts +3 -0
  268. package/dist/internal/floating-ui/utils.js +30 -0
  269. package/dist/internal/index.d.ts +9 -0
  270. package/dist/internal/index.js +9 -0
  271. package/dist/internal/polyfills/expander.svelte.d.ts +21 -0
  272. package/dist/internal/polyfills/expander.svelte.js +96 -0
  273. package/dist/internal/transitions.d.ts +32 -0
  274. package/dist/internal/transitions.js +37 -0
  275. package/dist/internal/utils.d.ts +22 -0
  276. package/dist/internal/utils.js +63 -0
  277. package/dist/providers/fluentui-svelte/fluentui-svelte.d.ts +19 -0
  278. package/dist/providers/fluentui-svelte/fluentui-svelte.js +11 -0
  279. package/dist/providers/fluentui-svelte/fluentui-svelte.svelte +68 -0
  280. package/dist/providers/fluentui-svelte/fluentui-svelte.svelte.d.ts +9 -0
  281. package/dist/types/index.d.ts +117 -0
  282. package/dist/types/index.js +1 -0
  283. package/package.json +142 -0
@@ -0,0 +1,63 @@
1
+ import type { Component, Snippet } from 'svelte';
2
+ import type { SVGAttributes } from 'svelte/elements';
3
+ import type { BadgePresence } from '../badge/types.ts';
4
+ import type { ActiveOrInactive, Colors, PolymorphicProps, Shapes } from '../../types/index.js';
5
+ /** @propsmith AvatarProps */
6
+ export type AvatarProps = {
7
+ /** The name of the person or entity represented by this Avatar. This should always be provided if it is available.
8
+ *
9
+ * The name is used to determine the initials displayed when there is no image. It is also provided to accessibility tools.
10
+ * @default 'Avatar'
11
+ * */
12
+ name?: string;
13
+ /** The Avatar's image */
14
+ image?: {
15
+ src: string;
16
+ };
17
+ /** The DOM reference of the avatar element.
18
+ * @bindable
19
+ */
20
+ ref?: HTMLDivElement;
21
+ /** Size of the avatar in pixels.
22
+ * @default 48
23
+ */
24
+ size?: number;
25
+ /** The avatar can have a circular, rounded or square shape.
26
+ * @default 'circular'
27
+ */
28
+ shape?: Shapes;
29
+ /** The color when displaying either an icon or initials. For now it only supports system colors (plus colorful).
30
+ * @default 'attention'
31
+ */
32
+ color?: Colors | 'colorful';
33
+ /** Optional activity indicator
34
+ *
35
+ * `active`: the avatar will be decorated according to activeAppearance
36
+ *
37
+ * `inactive`: the avatar will be reduced in size and partially transparent
38
+ * */
39
+ active?: ActiveOrInactive;
40
+ /** The appearance when `active="active"`
41
+ * @default 'ring'
42
+ */
43
+ activeAppearance?: 'ring' | 'shadow' | 'ring-shadow';
44
+ /** Custom initials by default they will be derived from the `name` prop.
45
+ *
46
+ * The initials are displayed when there is no image.
47
+ * @default name
48
+ */
49
+ initials?: string;
50
+ /** Specify a string to be used instead of the name, to determine which color to use when color="colorful".*/
51
+ idForColor?: string;
52
+ /** Icon to be displayed when the avatar doesn't have an image or initials.
53
+ * @type Snippet | Component
54
+ */
55
+ icon?: Snippet<[SVGAttributes<SVGElement>]> | Component<SVGAttributes<SVGElement>>;
56
+ /** The badge to display as a status indicator. (you can use with a custom icon)
57
+ * @type BadgePresence
58
+ */
59
+ badge?: BadgePresence & {
60
+ /** Set a custom badge. */
61
+ icon?: Snippet<[SVGAttributes<SVGElement>]> | Component<SVGAttributes<SVGElement>>;
62
+ };
63
+ } & PolymorphicProps<'div'>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,103 @@
1
+ <script lang="ts">
2
+ import { pxToRem, capitalize, RenderSoC } from '../../internal/index.js';
3
+ import { colors, getIconBadge } from './utils.svelte.js';
4
+ import type { BadgeIconProps } from './types.js';
5
+
6
+ let {
7
+ size = 20,
8
+ status = 'available',
9
+ outOfOffice = false,
10
+ icon: Icon,
11
+ class: classes,
12
+ color,
13
+ style,
14
+ ref = $bindable(),
15
+ ...attributes
16
+ }: BadgeIconProps = $props();
17
+
18
+ const arialabel = $derived(capitalize(status));
19
+ </script>
20
+
21
+ <!--
22
+ @component
23
+ Fluent UI Badge: You can use this component to paint icons that act as Badges. It does not support children. You can use any icon library you prefer.
24
+
25
+ Note that a scaling property is applied since FluentUI icons have around 20% padding. If you are using another library that doesn't add padding to its icons, you can reverse this by applying:
26
+
27
+ ```css
28
+ :global(.fs-badge-icon){
29
+ transform: scale(1);
30
+ }
31
+ ```
32
+
33
+ - Usage:
34
+ ```tsx
35
+ <script>
36
+ import { BadgeIcon } from 'fluentui-svelte';
37
+ import { HomeIcon } from 'some-icon-library';
38
+ </script>
39
+
40
+ <BadgeIcon size={24} shape="rounded" appearance="outline" color="success" icon={HomeIcon} />
41
+ ```
42
+ -->
43
+ <span
44
+ bind:this={ref}
45
+ aria-label={arialabel}
46
+ role="img"
47
+ class={['fs-badge-icon', color || colors[status], classes]}
48
+ style="--badge-size: {pxToRem(size)}; {style}"
49
+ {...attributes}
50
+ >
51
+ {#if Icon}
52
+ <RenderSoC
53
+ SoC={Icon}
54
+ args={[{ 'aria-hidden': true, width: size, height: size }]}
55
+ aria-hidden="true"
56
+ width="{size}px"
57
+ height="{size}px"
58
+ />
59
+ {:else}
60
+ <RenderSoC SoC={getIconBadge(outOfOffice, status)} aria-hidden="true" width="{size}px" height="{size}px" />
61
+ {/if}
62
+ </span>
63
+
64
+ <style>
65
+ .fs-badge-icon {
66
+ display: inline-flex;
67
+ justify-content: center;
68
+ align-items: center;
69
+ padding: 0rem;
70
+ user-select: none;
71
+ border-radius: var(--badge-shapes);
72
+ color: var(--fs-text-on-accent-primary);
73
+ line-height: var(--fs-caption-line-height);
74
+ font-size: calc(var(--badge-size) / 2);
75
+ font-weight: 600;
76
+ width: var(--badge-size);
77
+ min-width: max-content;
78
+ height: var(--badge-size);
79
+ & :global(svg) {
80
+ max-width: calc(var(--badge-size));
81
+ /* FluentUI icons have about 20% padding, but to keep the positioning consistent, we use a scale transform. */
82
+ transform: scale(1.25);
83
+ & :global(path) {
84
+ fill: currentColor;
85
+ }
86
+ }
87
+ &.information {
88
+ color: var(--fs-system-neutral-text);
89
+ }
90
+ &.attention {
91
+ color: var(--fs-accent-fill-default);
92
+ }
93
+ &.warning {
94
+ color: var(--fs-system-caution);
95
+ }
96
+ &.success {
97
+ color: var(--fs-system-success);
98
+ }
99
+ &.critical {
100
+ color: var(--fs-system-critical);
101
+ }
102
+ }
103
+ </style>
@@ -0,0 +1,25 @@
1
+ import type { BadgeIconProps } from './types.ts';
2
+ /**
3
+ * Fluent UI Badge: You can use this component to paint icons that act as Badges. It does not support children. You can use any icon library you prefer.
4
+ *
5
+ * Note that a scaling property is applied since FluentUI icons have around 20% padding. If you are using another library that doesn't add padding to its icons, you can reverse this by applying:
6
+ *
7
+ * ```css
8
+ * :global(.fs-badge-icon){
9
+ * transform: scale(1);
10
+ * }
11
+ * ```
12
+ *
13
+ * - Usage:
14
+ * ```tsx
15
+ * <script>
16
+ * import { BadgeIcon } from 'fluentui-svelte';
17
+ * import { HomeIcon } from 'some-icon-library';
18
+ * </script>
19
+ *
20
+ * <BadgeIcon size={24} shape="rounded" appearance="outline" color="success" icon={HomeIcon} />
21
+ * ```
22
+ */
23
+ declare const BadgeIcon: import("svelte").Component<BadgeIconProps, {}, "ref">;
24
+ type BadgeIcon = ReturnType<typeof BadgeIcon>;
25
+ export default BadgeIcon;
@@ -0,0 +1,163 @@
1
+ <script lang="ts">
2
+ import { pxToRem, RenderSoC } from '../../internal/index.js';
3
+ import { shapes } from './utils.svelte.js';
4
+ import type { BadgeProps } from './types.js';
5
+
6
+ let {
7
+ size = 20,
8
+ shape = 'circular',
9
+ appearance = 'filled',
10
+ color = 'information',
11
+ icon: Icon,
12
+ iconPosition = 'before',
13
+ children,
14
+ class: classes,
15
+ style,
16
+ ref = $bindable(),
17
+ ...attributes
18
+ }: BadgeProps = $props();
19
+ </script>
20
+
21
+ <!--
22
+ @component
23
+ Fluent UI Badge: It displays an icon and/or text with various styles and colors.
24
+ The badge can have different shapes, sizes, and appearances.
25
+ It is used to highlight or label items with additional information.
26
+ - Usage:
27
+ ```tsx
28
+ <script>
29
+ import { Badge } from 'fluentui-svelte';
30
+ import { HomeIcon } from 'some-icon-library';
31
+ </script>
32
+
33
+ <Badge size={24} shape="rounded" appearance="outline" color="success" Icon={HomeIcon}>
34
+ Home
35
+ </Badge>
36
+ ```
37
+ -->
38
+ <span
39
+ bind:this={ref}
40
+ class={['fs-badge', shape, appearance, color, classes]}
41
+ style="--badge-shapes: {shapes[shape]}; --badge-size: {pxToRem(size)}; {style}"
42
+ {...attributes}
43
+ >
44
+ {#if iconPosition === 'after'}
45
+ {@render children?.()}
46
+ <RenderSoC SoC={Icon} />
47
+ {:else}
48
+ <RenderSoC SoC={Icon} />
49
+ {@render children?.()}
50
+ {/if}
51
+ </span>
52
+
53
+ <style>
54
+ .fs-badge {
55
+ display: inline-flex;
56
+ justify-content: center;
57
+ position: relative;
58
+ align-items: center;
59
+ padding: 0.25rem;
60
+ gap: 0.25rem;
61
+ user-select: none;
62
+ border-radius: var(--badge-shapes);
63
+ color: var(--fs-text-on-accent-primary);
64
+ line-height: var(--fs-caption-line-height);
65
+ font-size: calc(var(--badge-size) / 2);
66
+ font-weight: 600;
67
+ width: var(--badge-size);
68
+ min-width: max-content;
69
+ height: var(--badge-size);
70
+ & :global(svg) {
71
+ width: calc(var(--badge-size) / 1.5);
72
+ & :global(path) {
73
+ fill: var(--fs-text-on-accent-primary);
74
+ }
75
+ }
76
+ &.information {
77
+ background: var(--fs-system-neutral);
78
+ &:not(.filled) {
79
+ color: var(--fs-system-neutral);
80
+ & :global(path) {
81
+ fill: var(--fs-system-neutral);
82
+ }
83
+ }
84
+ &.tint {
85
+ background: var(--fs-system-neutral-bg);
86
+ }
87
+ }
88
+ &.attention {
89
+ background: var(--fs-system-attention);
90
+ &:not(.filled) {
91
+ color: var(--fs-accent-text-primary);
92
+ & :global(path) {
93
+ fill: var(--fs-accent-text-primary);
94
+ }
95
+ }
96
+ &.tint {
97
+ background: var(--fs-system-attention-bg);
98
+ }
99
+ }
100
+ &.warning {
101
+ background: var(--fs-system-caution);
102
+ &:not(.filled) {
103
+ color: var(--fs-system-caution-text);
104
+ & :global(path) {
105
+ fill: var(--fs-system-caution-text);
106
+ }
107
+ }
108
+ &.tint {
109
+ background: var(--fs-system-caution-bg);
110
+ }
111
+ }
112
+ &.success {
113
+ background: var(--fs-system-success);
114
+ &:not(.filled) {
115
+ color: var(--fs-system-success-text);
116
+ & :global(path) {
117
+ fill: var(--fs-system-success-text);
118
+ }
119
+ }
120
+ &.tint {
121
+ background: var(--fs-system-success-bg);
122
+ }
123
+ }
124
+ &.critical {
125
+ background: var(--fs-system-critical);
126
+ &:not(.filled) {
127
+ color: var(--fs-system-critical-text);
128
+ & :global(path) {
129
+ fill: var(--fs-system-critical-text);
130
+ }
131
+ }
132
+ &.tint {
133
+ background: var(--fs-system-critical-bg);
134
+ }
135
+ }
136
+ &.outline:after,
137
+ &.tint:after {
138
+ content: '';
139
+ position: absolute;
140
+ inset: 0;
141
+ border-radius: var(--badge-shapes);
142
+ }
143
+ &.outline {
144
+ border: 1px solid currentColor;
145
+ }
146
+ &.tint {
147
+ border: 1px solid color-mix(in srgb, currentColor, transparent 50%);
148
+ }
149
+ &:not(.filled, .tint) {
150
+ background: transparent;
151
+ }
152
+ &.ghost :global(svg) {
153
+ width: auto;
154
+ max-width: calc(var(--badge-size) + 4px);
155
+ position: absolute;
156
+ top: -3px;
157
+ left: -3px;
158
+ & :global(path) {
159
+ fill: var(--fs-text-on-accent-primary);
160
+ }
161
+ }
162
+ }
163
+ </style>
@@ -0,0 +1,20 @@
1
+ import type { BadgeProps } from './types.ts';
2
+ /**
3
+ * Fluent UI Badge: It displays an icon and/or text with various styles and colors.
4
+ * The badge can have different shapes, sizes, and appearances.
5
+ * It is used to highlight or label items with additional information.
6
+ * - Usage:
7
+ * ```tsx
8
+ * <script>
9
+ * import { Badge } from 'fluentui-svelte';
10
+ * import { HomeIcon } from 'some-icon-library';
11
+ * </script>
12
+ *
13
+ * <Badge size={24} shape="rounded" appearance="outline" color="success" Icon={HomeIcon}>
14
+ * Home
15
+ * </Badge>
16
+ * ```
17
+ */
18
+ declare const Badge: import("svelte").Component<BadgeProps, {}, "ref">;
19
+ type Badge = ReturnType<typeof Badge>;
20
+ export default Badge;
@@ -0,0 +1,133 @@
1
+ # Badge
2
+
3
+ A badge is a visual decoration for UI elements used to display notifications, status indicators, or counts. It supports different colors and styles to match various UI needs.
4
+
5
+ ## Usage
6
+
7
+ ```svelte
8
+ <script>
9
+ import { Badge } from 'fluentui-svelte';
10
+ </script>
11
+
12
+ <Badge>36</Badge>
13
+ ```
14
+
15
+ ## Badge API
16
+
17
+ A brief explanation of the props that really need explaining. You can see the rest of the props here.
18
+
19
+ ## Examples
20
+
21
+ ### Appearance
22
+
23
+ Use the appearance prop to switch between filled, outline, tint, and ghost styles.
24
+
25
+ ```svelte
26
+ <Badge size={46} color="attention">5</Badge>
27
+ <Badge size={46} color="attention" appearance="outline">5</Badge>
28
+ <Badge size={46} color="attention" appearance="tint">5</Badge>
29
+ <Badge size={46} color="attention" appearance="ghost">5</Badge>
30
+ ```
31
+
32
+ ### Sizes
33
+
34
+ Use the size prop to control the badge dimensions.
35
+
36
+ ```svelte
37
+ <Badge size={42} color="attention">46</Badge>
38
+ <Badge size={56} color="attention">56</Badge>
39
+ <Badge size={64} color="attention">64</Badge>
40
+ <Badge size={96} color="attention">96</Badge>
41
+ ```
42
+
43
+ ### Shapes
44
+
45
+ Use the shape prop to render circular, rounded, or square badges.
46
+
47
+ ```svelte
48
+ <Badge size={36} color="attention">36</Badge>
49
+ <Badge size={36} color="attention" shape="rounded">36</Badge>
50
+ <Badge size={36} color="attention" shape="square">36</Badge>
51
+ ```
52
+
53
+ ### Color
54
+
55
+ Use the color prop to communicate different statuses and priorities.
56
+
57
+ ```svelte
58
+ <Badge size={36} color="information">I</Badge>
59
+ <Badge size={36} color="attention">A</Badge>
60
+ <Badge size={36} color="warning">W</Badge>
61
+ <Badge size={36} color="critical">C</Badge>
62
+ <Badge size={36} color="success">S</Badge>
63
+ ```
64
+
65
+ ### Icon
66
+
67
+ Use the icon prop to render an icon inside the badge. You can pass the icon as a snippet or as a component.
68
+
69
+ > **Only icon?** If you use this component and notice padding between the wrapper and the icon, use the BadgeIcon component instead to avoid it.
70
+
71
+ ```svelte
72
+ <script>
73
+ import { Badge } from 'fluentui-svelte';
74
+ import { AccessibilityRegular } from 'fluentui-icons-svelte';
75
+ </script>
76
+
77
+ <Badge color="attention" size={96} icon={AccessibilityRegular} />
78
+ ```
79
+
80
+ ## Badge Props
81
+
82
+ | Name | Type | Description |
83
+ | -------------- | ------------------------ | ------------------------------------------------------------------------------------------------------ |
84
+ | `size` | `number` | The size of the badge in pixels. |
85
+ | `shape` | `string` | The shape of the badge. Possible values: 'circular', 'rounded', 'square'. |
86
+ | `appearance` | `string` | The appearance of the badge. Possible values: 'filled', 'outline', 'ghost', 'tint'. |
87
+ | `iconPosition` | `string` | The position of the icon inside the badge. Possible values: 'before', 'after'. |
88
+ | `color` | `string` | The color of the badge. Possible values: 'information', 'attention', 'warning', 'success', 'critical'. |
89
+ | `icon` | `Snippet` \| `Component` | The icon to display inside the badge. |
90
+ | `ref` | `HTMLSpanElement` | The DOM reference of the badge element. |
91
+ | `children` | `Snippet` | The children elements to render inside the badge. |
92
+
93
+ ## BadgeIcon API
94
+
95
+ This component is useful when you want to show an icon in the form of a Badge somewhere in your app.
96
+
97
+ ### Usage
98
+
99
+ ```svelte
100
+ <script>
101
+ import { BadgeIcon } from 'fluentui-svelte';
102
+ import { AccessibilityRegular } from 'fluentui-icons-svelte';
103
+ </script>
104
+
105
+ <BadgeIcon size={96} icon={AccessibilityRegular} />
106
+ ```
107
+
108
+ One example is using this component inside Avatar:
109
+
110
+ By default, Avatar uses an instance of BadgeIcon. As you can see, the first example on the left uses the Badge component, which adds unwanted padding inside it. In Avatar, you can use one of the predefined BadgeIcon options, or set a custom icon by passing it as a property. When you use the component option, the styles are applied automatically, but with #snippet you need to make sure you pass the arguments to the icon like this:
111
+
112
+ ```svelte
113
+ <script>
114
+ import { Avatar, Badge } from 'fluentui-svelte';
115
+ import { AccessibilityRegular } from 'fluentui-icons-svelte';
116
+ </script>
117
+
118
+ <!-- args: [size: number, shape: string] -->
119
+ {#snippet customBadge(args)}
120
+ <Badge color="attention" size={args.width} aria-hidden={args['aria-hidden']} icon={AccessibilityRegular} />
121
+ {/snippet}
122
+
123
+ <Avatar active="active" size={96} name="FluentUI Svelte" badge={{ icon: customBadge }} />
124
+ ```
125
+
126
+ ### BadgeIcon Props
127
+
128
+ | Name | Type | Description |
129
+ | ------- | ------------------------ | ------------------------------------------------------------------------------------------------------ |
130
+ | `size` | `number` | The size of the badge in pixels. |
131
+ | `color` | `string` | The color of the badge. Possible values: 'information', 'attention', 'warning', 'success', 'critical'. |
132
+ | `icon` | `Snippet` \| `Component` | The icon to display inside the badge. |
133
+ | `ref` | `HTMLSpanElement` | The DOM reference of the badge element. |
@@ -0,0 +1,70 @@
1
+ import type { Component, Snippet } from 'svelte';
2
+ import type { SVGAttributes } from 'svelte/elements';
3
+ import type { BeforeOrAfter, Colors, PolymorphicProps, Shapes, Statuses, Variants } from '../../types/index.js';
4
+ /** @propsmith BadgeProps */
5
+ export type BadgeProps = {
6
+ /** The size of the badge in pixels.
7
+ * @default 20
8
+ */
9
+ size?: number;
10
+ /** The badge can have a circular, rounded or square shape.
11
+ * @default 'circular'
12
+ */
13
+ shape?: Shapes;
14
+ /** The badge can have its background and border styled for greater emphasis or to be subtle.
15
+ * @default 'filled'
16
+ */
17
+ appearance?: Variants;
18
+ /** The position of the icon relative to the badge content.
19
+ * @default 'before'
20
+ */
21
+ iconPosition?: BeforeOrAfter;
22
+ /** The color of the badge. For now it only supports system colors.
23
+ * @default 'information'
24
+ */
25
+ color?: Colors;
26
+ /** Icon to render inside the badge.
27
+ * @type Snippet | Component
28
+ */
29
+ icon?: Snippet<[SVGAttributes<SVGElement>]> | Component<SVGAttributes<SVGElement>>;
30
+ /** The DOM reference of the badge element.
31
+ * @bindable
32
+ */
33
+ ref?: HTMLSpanElement;
34
+ } & PolymorphicProps<'span'>;
35
+ /** The presence of a person, rendered by BadgeIcon on its own or by an Avatar through its badge prop. */
36
+ export type BadgePresence = {
37
+ /** The presence status to display.
38
+ * @default 'available'
39
+ */
40
+ status?: Statuses;
41
+ /** Decorates the presence icon to signal that the person is out of office.
42
+ * @default false
43
+ */
44
+ outOfOffice?: boolean;
45
+ };
46
+ /** @propsmith BadgeIconProps */
47
+ export type BadgeIconProps = {
48
+ /** The presence status to display. It picks both the icon and the color of the badge.
49
+ * @default 'available'
50
+ */
51
+ status?: Statuses;
52
+ /** Decorates the presence icon to signal that the person is out of office.
53
+ * @default false
54
+ */
55
+ outOfOffice?: boolean;
56
+ /** The size of the badge in pixels.
57
+ * @default 20
58
+ */
59
+ size?: number;
60
+ /** Overrides the color the status would pick on its own. */
61
+ color?: Colors;
62
+ /** Custom icon, rendered instead of the one the status would pick on its own.
63
+ * @type Snippet | Component
64
+ */
65
+ icon?: Snippet<[SVGAttributes<SVGElement>]> | Component<SVGAttributes<SVGElement>>;
66
+ /** The DOM reference of the badge element.
67
+ * @bindable
68
+ */
69
+ ref?: HTMLSpanElement;
70
+ } & Omit<PolymorphicProps<'span'>, 'children'>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,16 @@
1
+ export declare const shapes: {
2
+ rounded: string;
3
+ circular: string;
4
+ square: string;
5
+ };
6
+ export declare const getIconBadge: (outOfOffice: boolean, status: string) => import("svelte").Component<import("svelte/elements").SVGAttributes<SVGElement>, {}, ""> | undefined;
7
+ export declare const colors: {
8
+ available: string;
9
+ away: string;
10
+ busy: string;
11
+ 'do-not-disturb': string;
12
+ offline: string;
13
+ 'out-of-office': string;
14
+ blocked: string;
15
+ unknown: string;
16
+ };
@@ -0,0 +1,35 @@
1
+ import CheckmarkCircleFilled from 'fluentui-icons-svelte/CheckmarkCircleFilled.svelte';
2
+ import CheckmarkCircleRegular from 'fluentui-icons-svelte/CheckmarkCircleRegular.svelte';
3
+ import ClockFilled from 'fluentui-icons-svelte/ClockFilled.svelte';
4
+ import CircleFilled from 'fluentui-icons-svelte/CircleFilled.svelte';
5
+ import CircleRegular from 'fluentui-icons-svelte/CircleRegular.svelte';
6
+ import SubtractCircleFilled from 'fluentui-icons-svelte/SubtractCircleFilled.svelte';
7
+ import SubtractCircleRegular from 'fluentui-icons-svelte/SubtractCircleRegular.svelte';
8
+ import DismissCircleRegular from 'fluentui-icons-svelte/DismissCircleRegular.svelte';
9
+ import ArrowCircleLeftRegular from 'fluentui-icons-svelte/ArrowCircleLeftRegular.svelte';
10
+ import ProhibitedFilled from 'fluentui-icons-svelte/ProhibitedFilled.svelte';
11
+ export const shapes = {
12
+ rounded: 'var(--fs-control-border-radius)',
13
+ circular: '9999rem',
14
+ square: '0'
15
+ };
16
+ export const getIconBadge = (outOfOffice, status) => ({
17
+ available: outOfOffice ? CheckmarkCircleRegular : CheckmarkCircleFilled,
18
+ away: outOfOffice ? ArrowCircleLeftRegular : ClockFilled,
19
+ busy: outOfOffice ? CircleRegular : CircleFilled,
20
+ 'do-not-disturb': outOfOffice ? SubtractCircleRegular : SubtractCircleFilled,
21
+ offline: outOfOffice ? ArrowCircleLeftRegular : DismissCircleRegular,
22
+ 'out-of-office': ArrowCircleLeftRegular,
23
+ blocked: ProhibitedFilled,
24
+ unknown: CircleRegular
25
+ })[status];
26
+ export const colors = {
27
+ available: 'success',
28
+ away: 'warning',
29
+ busy: 'critical',
30
+ 'do-not-disturb': 'critical',
31
+ offline: 'information',
32
+ 'out-of-office': 'information',
33
+ blocked: 'critical',
34
+ unknown: 'information'
35
+ };