@orianatech/pire 0.2.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 (154) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +7 -0
  3. package/README.md +114 -0
  4. package/dist/components/core/Avatar.d.cts +11 -0
  5. package/dist/components/core/Avatar.d.ts +12 -0
  6. package/dist/components/core/Avatar.d.ts.map +1 -0
  7. package/dist/components/core/Badge.d.cts +9 -0
  8. package/dist/components/core/Badge.d.ts +10 -0
  9. package/dist/components/core/Badge.d.ts.map +1 -0
  10. package/dist/components/core/Button.d.cts +17 -0
  11. package/dist/components/core/Button.d.ts +18 -0
  12. package/dist/components/core/Button.d.ts.map +1 -0
  13. package/dist/components/core/Card.d.cts +13 -0
  14. package/dist/components/core/Card.d.ts +14 -0
  15. package/dist/components/core/Card.d.ts.map +1 -0
  16. package/dist/components/core/Icon.d.cts +22 -0
  17. package/dist/components/core/Icon.d.ts +23 -0
  18. package/dist/components/core/Icon.d.ts.map +1 -0
  19. package/dist/components/core/IconButton.d.cts +15 -0
  20. package/dist/components/core/IconButton.d.ts +16 -0
  21. package/dist/components/core/IconButton.d.ts.map +1 -0
  22. package/dist/components/core/SegmentedControl.d.cts +23 -0
  23. package/dist/components/core/SegmentedControl.d.ts +24 -0
  24. package/dist/components/core/SegmentedControl.d.ts.map +1 -0
  25. package/dist/components/core/Tag.d.cts +8 -0
  26. package/dist/components/core/Tag.d.ts +9 -0
  27. package/dist/components/core/Tag.d.ts.map +1 -0
  28. package/dist/components/data/DataTable.d.cts +40 -0
  29. package/dist/components/data/DataTable.d.ts +41 -0
  30. package/dist/components/data/DataTable.d.ts.map +1 -0
  31. package/dist/components/data/DescriptionList.d.cts +21 -0
  32. package/dist/components/data/DescriptionList.d.ts +22 -0
  33. package/dist/components/data/DescriptionList.d.ts.map +1 -0
  34. package/dist/components/data/FilterBar.d.cts +19 -0
  35. package/dist/components/data/FilterBar.d.ts +20 -0
  36. package/dist/components/data/FilterBar.d.ts.map +1 -0
  37. package/dist/components/data/KpiTile.d.cts +23 -0
  38. package/dist/components/data/KpiTile.d.ts +24 -0
  39. package/dist/components/data/KpiTile.d.ts.map +1 -0
  40. package/dist/components/data/LinkList.d.cts +18 -0
  41. package/dist/components/data/LinkList.d.ts +19 -0
  42. package/dist/components/data/LinkList.d.ts.map +1 -0
  43. package/dist/components/data/ObjectHeader.d.cts +21 -0
  44. package/dist/components/data/ObjectHeader.d.ts +22 -0
  45. package/dist/components/data/ObjectHeader.d.ts.map +1 -0
  46. package/dist/components/data/Timeline.d.cts +16 -0
  47. package/dist/components/data/Timeline.d.ts +17 -0
  48. package/dist/components/data/Timeline.d.ts.map +1 -0
  49. package/dist/components/feedback/Dialog.d.cts +21 -0
  50. package/dist/components/feedback/Dialog.d.ts +22 -0
  51. package/dist/components/feedback/Dialog.d.ts.map +1 -0
  52. package/dist/components/feedback/InlineMessage.d.cts +13 -0
  53. package/dist/components/feedback/InlineMessage.d.ts +14 -0
  54. package/dist/components/feedback/InlineMessage.d.ts.map +1 -0
  55. package/dist/components/feedback/ProgressBar.d.cts +16 -0
  56. package/dist/components/feedback/ProgressBar.d.ts +17 -0
  57. package/dist/components/feedback/ProgressBar.d.ts.map +1 -0
  58. package/dist/components/feedback/Toast.d.cts +28 -0
  59. package/dist/components/feedback/Toast.d.ts +29 -0
  60. package/dist/components/feedback/Toast.d.ts.map +1 -0
  61. package/dist/components/feedback/Tooltip.d.cts +11 -0
  62. package/dist/components/feedback/Tooltip.d.ts +12 -0
  63. package/dist/components/feedback/Tooltip.d.ts.map +1 -0
  64. package/dist/components/forms/Checkbox.d.cts +9 -0
  65. package/dist/components/forms/Checkbox.d.ts +10 -0
  66. package/dist/components/forms/Checkbox.d.ts.map +1 -0
  67. package/dist/components/forms/ComboBox.d.cts +45 -0
  68. package/dist/components/forms/ComboBox.d.ts +46 -0
  69. package/dist/components/forms/ComboBox.d.ts.map +1 -0
  70. package/dist/components/forms/DatePicker.d.cts +27 -0
  71. package/dist/components/forms/DatePicker.d.ts +28 -0
  72. package/dist/components/forms/DatePicker.d.ts.map +1 -0
  73. package/dist/components/forms/FormField.d.cts +17 -0
  74. package/dist/components/forms/FormField.d.ts +18 -0
  75. package/dist/components/forms/FormField.d.ts.map +1 -0
  76. package/dist/components/forms/Input.d.cts +33 -0
  77. package/dist/components/forms/Input.d.ts +34 -0
  78. package/dist/components/forms/Input.d.ts.map +1 -0
  79. package/dist/components/forms/NumberField.d.cts +33 -0
  80. package/dist/components/forms/NumberField.d.ts +34 -0
  81. package/dist/components/forms/NumberField.d.ts.map +1 -0
  82. package/dist/components/forms/Radio.d.cts +18 -0
  83. package/dist/components/forms/Radio.d.ts +19 -0
  84. package/dist/components/forms/Radio.d.ts.map +1 -0
  85. package/dist/components/forms/Select.d.cts +28 -0
  86. package/dist/components/forms/Select.d.ts +29 -0
  87. package/dist/components/forms/Select.d.ts.map +1 -0
  88. package/dist/components/forms/Switch.d.cts +9 -0
  89. package/dist/components/forms/Switch.d.ts +10 -0
  90. package/dist/components/forms/Switch.d.ts.map +1 -0
  91. package/dist/components/forms/ValueHelpField.d.cts +31 -0
  92. package/dist/components/forms/ValueHelpField.d.ts +32 -0
  93. package/dist/components/forms/ValueHelpField.d.ts.map +1 -0
  94. package/dist/components/layout/FooterBar.d.cts +10 -0
  95. package/dist/components/layout/FooterBar.d.ts +11 -0
  96. package/dist/components/layout/FooterBar.d.ts.map +1 -0
  97. package/dist/components/layout/PageHeader.d.cts +10 -0
  98. package/dist/components/layout/PageHeader.d.ts +11 -0
  99. package/dist/components/layout/PageHeader.d.ts.map +1 -0
  100. package/dist/components/layout/SectionHeader.d.cts +11 -0
  101. package/dist/components/layout/SectionHeader.d.ts +12 -0
  102. package/dist/components/layout/SectionHeader.d.ts.map +1 -0
  103. package/dist/components/layout/SelectionBar.d.cts +14 -0
  104. package/dist/components/layout/SelectionBar.d.ts +15 -0
  105. package/dist/components/layout/SelectionBar.d.ts.map +1 -0
  106. package/dist/components/navigation/Breadcrumb.d.cts +14 -0
  107. package/dist/components/navigation/Breadcrumb.d.ts +15 -0
  108. package/dist/components/navigation/Breadcrumb.d.ts.map +1 -0
  109. package/dist/components/navigation/Pagination.d.cts +13 -0
  110. package/dist/components/navigation/Pagination.d.ts +14 -0
  111. package/dist/components/navigation/Pagination.d.ts.map +1 -0
  112. package/dist/components/navigation/ShellBar.d.cts +17 -0
  113. package/dist/components/navigation/ShellBar.d.ts +18 -0
  114. package/dist/components/navigation/ShellBar.d.ts.map +1 -0
  115. package/dist/components/navigation/SideNav.d.cts +22 -0
  116. package/dist/components/navigation/SideNav.d.ts +23 -0
  117. package/dist/components/navigation/SideNav.d.ts.map +1 -0
  118. package/dist/components/navigation/Tabs.d.cts +23 -0
  119. package/dist/components/navigation/Tabs.d.ts +24 -0
  120. package/dist/components/navigation/Tabs.d.ts.map +1 -0
  121. package/dist/components/patterns/ConfirmDialog.d.cts +21 -0
  122. package/dist/components/patterns/ConfirmDialog.d.ts +22 -0
  123. package/dist/components/patterns/ConfirmDialog.d.ts.map +1 -0
  124. package/dist/components/patterns/EmptyState.d.cts +13 -0
  125. package/dist/components/patterns/EmptyState.d.ts +14 -0
  126. package/dist/components/patterns/EmptyState.d.ts.map +1 -0
  127. package/dist/components/patterns/SidePanel.d.cts +14 -0
  128. package/dist/components/patterns/SidePanel.d.ts +15 -0
  129. package/dist/components/patterns/SidePanel.d.ts.map +1 -0
  130. package/dist/components/patterns/ValueHelpDialog.d.cts +20 -0
  131. package/dist/components/patterns/ValueHelpDialog.d.ts +21 -0
  132. package/dist/components/patterns/ValueHelpDialog.d.ts.map +1 -0
  133. package/dist/components/utils/cx.d.cts +2 -0
  134. package/dist/components/utils/cx.d.ts +3 -0
  135. package/dist/components/utils/cx.d.ts.map +1 -0
  136. package/dist/components.css +352 -0
  137. package/dist/index.cjs +1590 -0
  138. package/dist/index.cjs.map +1 -0
  139. package/dist/index.d.cts +46 -0
  140. package/dist/index.d.ts +47 -0
  141. package/dist/index.d.ts.map +1 -0
  142. package/dist/index.js +1560 -0
  143. package/dist/index.js.map +1 -0
  144. package/dist/pire.css +11 -0
  145. package/dist/tokens/base.css +18 -0
  146. package/dist/tokens/colors.css +53 -0
  147. package/dist/tokens/elevation.css +21 -0
  148. package/dist/tokens/fonts.css +15 -0
  149. package/dist/tokens/motion.css +13 -0
  150. package/dist/tokens/spacing.css +18 -0
  151. package/dist/tokens/themes.css +23 -0
  152. package/dist/tokens/typography.css +39 -0
  153. package/dist/tokens.css +8 -0
  154. package/package.json +99 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/components/core/Icon.tsx","../src/components/core/Button.tsx","../src/components/utils/cx.ts","../src/components/core/IconButton.tsx","../src/components/feedback/Tooltip.tsx","../src/components/core/Badge.tsx","../src/components/core/Tag.tsx","../src/components/core/Card.tsx","../src/components/core/Avatar.tsx","../src/components/core/SegmentedControl.tsx","../src/components/forms/FormField.tsx","../src/components/forms/Input.tsx","../src/components/forms/Select.tsx","../src/components/forms/Checkbox.tsx","../src/components/forms/Radio.tsx","../src/components/forms/Switch.tsx","../src/components/forms/ComboBox.tsx","../src/components/forms/NumberField.tsx","../src/components/forms/DatePicker.tsx","../src/components/forms/ValueHelpField.tsx","../src/components/patterns/ValueHelpDialog.tsx","../src/components/feedback/Dialog.tsx","../src/components/data/DataTable.tsx","../src/components/navigation/ShellBar.tsx","../src/components/navigation/SideNav.tsx","../src/components/navigation/Tabs.tsx","../src/components/navigation/Breadcrumb.tsx","../src/components/navigation/Pagination.tsx","../src/components/feedback/InlineMessage.tsx","../src/components/feedback/ProgressBar.tsx","../src/components/feedback/Toast.tsx","../src/components/data/KpiTile.tsx","../src/components/data/ObjectHeader.tsx","../src/components/data/FilterBar.tsx","../src/components/data/DescriptionList.tsx","../src/components/data/Timeline.tsx","../src/components/data/LinkList.tsx","../src/components/layout/PageHeader.tsx","../src/components/layout/SectionHeader.tsx","../src/components/layout/SelectionBar.tsx","../src/components/layout/FooterBar.tsx","../src/components/patterns/ConfirmDialog.tsx","../src/components/patterns/SidePanel.tsx","../src/components/patterns/EmptyState.tsx"],"sourcesContent":["/* @orianatech/pire — Pire Design System components.\n Styles are a separate import so they can be loaded once, ahead of the bundle:\n import '@orianatech/pire/styles.css'; */\n\nexport { Icon, configureIcons, type IconProps, type IconPack, type IconConfig } from './components/core/Icon';\nexport { Button, type ButtonProps } from './components/core/Button';\nexport { IconButton, type IconButtonProps } from './components/core/IconButton';\nexport { Badge, type BadgeProps, type BadgeStatus } from './components/core/Badge';\nexport { Tag, type TagProps } from './components/core/Tag';\nexport { Card, type CardProps } from './components/core/Card';\nexport { Avatar, type AvatarProps } from './components/core/Avatar';\nexport { SegmentedControl, type SegmentedControlProps, type SegmentOption } from './components/core/SegmentedControl';\n\nexport { FormField, type FormFieldProps } from './components/forms/FormField';\nexport { Input, type InputProps } from './components/forms/Input';\nexport { Select, type SelectProps, type SelectOption } from './components/forms/Select';\nexport { Checkbox, type CheckboxProps } from './components/forms/Checkbox';\nexport { RadioGroup, Radio, type RadioGroupProps, type RadioProps } from './components/forms/Radio';\nexport { Switch, type SwitchProps } from './components/forms/Switch';\nexport { ComboBox, type ComboBoxProps, type ComboBoxOption } from './components/forms/ComboBox';\nexport { NumberField, type NumberFieldProps } from './components/forms/NumberField';\nexport { DatePicker, type DatePickerProps } from './components/forms/DatePicker';\nexport { ValueHelpField, type ValueHelpFieldProps } from './components/forms/ValueHelpField';\n\nexport { ShellBar, type ShellBarProps } from './components/navigation/ShellBar';\nexport { SideNav, type SideNavProps, type SideNavItem, type SideNavGroup } from './components/navigation/SideNav';\nexport { Tabs, type TabsProps, type TabItem } from './components/navigation/Tabs';\nexport { Breadcrumb, type BreadcrumbProps, type BreadcrumbItem } from './components/navigation/Breadcrumb';\nexport { Pagination, type PaginationProps } from './components/navigation/Pagination';\n\nexport { Dialog, type DialogProps } from './components/feedback/Dialog';\nexport { InlineMessage, type InlineMessageProps, type MessageKind } from './components/feedback/InlineMessage';\nexport { ProgressBar, type ProgressBarProps } from './components/feedback/ProgressBar';\nexport { Tooltip, type TooltipProps } from './components/feedback/Tooltip';\nexport { Toast, ToastProvider, useToast, type ToastProps, type ToastItem } from './components/feedback/Toast';\n\nexport { DataTable, type DataTableProps, type DataTableColumn, type DataTableSort } from './components/data/DataTable';\nexport { KpiTile, type KpiTileProps } from './components/data/KpiTile';\nexport { ObjectHeader, type ObjectHeaderProps, type ObjectFact } from './components/data/ObjectHeader';\nexport { FilterBar, type FilterBarProps, type ActiveFilter } from './components/data/FilterBar';\nexport { DescriptionList, type DescriptionListProps, type DescriptionItem } from './components/data/DescriptionList';\nexport { Timeline, type TimelineProps, type TimelineEntry } from './components/data/Timeline';\nexport { LinkList, type LinkListProps, type LinkListItem } from './components/data/LinkList';\n\nexport { PageHeader, type PageHeaderProps } from './components/layout/PageHeader';\nexport { SectionHeader, type SectionHeaderProps } from './components/layout/SectionHeader';\nexport { SelectionBar, type SelectionBarProps } from './components/layout/SelectionBar';\nexport { FooterBar, type FooterBarProps } from './components/layout/FooterBar';\n\nexport { ConfirmDialog, type ConfirmDialogProps } from './components/patterns/ConfirmDialog';\nexport { ValueHelpDialog, type ValueHelpDialogProps } from './components/patterns/ValueHelpDialog';\nexport { SidePanel, type SidePanelProps } from './components/patterns/SidePanel';\nexport { EmptyState, type EmptyStateProps } from './components/patterns/EmptyState';\n\n/** Re-exported so apps can compose overlays and collections without a second dependency. */\nexport { DialogTrigger, MenuTrigger, Menu, MenuItem, Popover, Separator, I18nProvider } from 'react-aria-components';\nexport type { DateValue } from 'react-aria-components';\n","import * as React from 'react';\n\nexport type IconPack = 'carbon' | 'lucide';\n\n/** Canonical Pire icon names are Lucide slugs; the Carbon pack is reached through this map,\n * so call sites never change when the pack is swapped. */\nconst CARBON_MAP: Record<string, string> = {\n 'menu':'menu','search':'search','bell':'notification','help-circle':'help','grid-3x3':'grid',\n 'home':'home','file-text':'document','clipboard-list':'list--checked','building-2':'building',\n 'boxes':'box','truck':'delivery-truck','stamp':'checkmark--outline','check':'checkmark','x':'close',\n 'minus':'subtract','plus':'add','trash-2':'trash-can','printer':'printer','paperclip':'attachment',\n 'download':'download','calendar':'calendar','hash':'hashtag','history':'recently-viewed',\n 'calculator':'calculator','zap':'flash','palette':'color-palette','settings':'settings',\n 'sliders-horizontal':'settings--adjust','filter':'filter','rows-3':'list','align-justify':'list--boxes',\n 'more-vertical':'overflow-menu--vertical','alert-triangle':'warning--alt','alert-octagon':'error--filled',\n 'alert-circle':'warning--filled','check-circle-2':'checkmark--filled','x-circle':'misuse',\n 'info':'information','circle':'circle-dash','chevron-right':'chevron--right','chevron-left':'chevron--left',\n 'chevron-down':'chevron--down','chevrons-up-down':'chevron--sort','arrow-right':'arrow--right',\n 'arrow-up':'arrow--up','arrow-down':'arrow--down','trending-up':'arrow--up','trending-down':'arrow--down',\n 'shopping-cart':'shopping--cart','user':'user','shapes':'apps','type':'text--font',\n 'package':'box','warehouse':'building--insights-1','arrow-up-down':'arrows--vertical','scan-line':'qr-code',\n 'circle-alert':'warning--filled','clock':'time','layers':'layers','map-pin':'location','copy':'copy',\n 'refresh-cw':'renew','external-link':'launch','pencil':'edit','lock':'locked','eye':'view','minimize-2':'minimize',\n};\n\nconst PACKS: Record<IconPack, { base: string; map: Record<string, string> | null }> = {\n carbon: { base: 'https://cdn.jsdelivr.net/npm/@carbon/icons@11/svg/32/', map: CARBON_MAP },\n lucide: { base: 'https://cdn.jsdelivr.net/npm/lucide-static/icons/', map: null },\n};\n\nexport interface IconConfig {\n /** Pack used when an <Icon> does not specify one. Default 'carbon'. */\n pack?: IconPack;\n /** Serve glyphs from your own origin: a folder of <slug>.svg files. Recommended in production. */\n base?: string;\n}\nlet config: IconConfig = {};\n/** Point the whole app at a self-hosted glyph folder, or switch packs, once at startup. */\nexport function configureIcons(next: IconConfig) { config = { ...config, ...next }; }\n\nexport interface IconProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'children'> {\n /** Canonical (Lucide) slug, e.g. \"shopping-cart\". Mapped automatically for the Carbon pack. */\n name: string;\n /** Pixel box. 16 in dense UI, 20 in headers, 24 in tiles. */\n size?: number;\n /** Accessible name. Omit for decorative icons — they are hidden from assistive tech. */\n label?: string;\n pack?: IconPack;\n}\n\n/** Glyph painted as a CSS mask over currentColor, so it inherits text colour everywhere.\n * A missing glyph degrades to empty space rather than a solid block. */\nexport function Icon({ name, size = 16, label, pack, style, ...rest }: IconProps) {\n const cfg = PACKS[pack ?? config.pack ?? 'carbon'] ?? PACKS.lucide;\n const slug = cfg.map ? cfg.map[name] ?? name : name;\n const url = `${config.base ?? cfg.base}${slug}.svg`;\n const [failed, setFailed] = React.useState(false);\n React.useEffect(() => setFailed(false), [url]);\n const mask = `url(\"${url}\") center / ${size}px ${size}px no-repeat`;\n return (\n <span\n role={label ? 'img' : undefined}\n aria-label={label}\n aria-hidden={label ? undefined : true}\n data-icon={name}\n {...rest}\n style={{ position: 'relative', display: 'inline-block', flex: '0 0 auto', width: size, height: size,\n backgroundColor: failed ? 'transparent' : 'currentColor',\n WebkitMaskImage: failed ? undefined : `url(\"${url}\")`,\n WebkitMask: failed ? undefined : mask, mask: failed ? undefined : mask, ...style }}\n >\n <img src={url} alt=\"\" aria-hidden=\"true\" onError={() => setFailed(true)}\n style={{ position: 'absolute', width: 1, height: 1, opacity: 0, pointerEvents: 'none' }} />\n </span>\n );\n}\n","import * as React from 'react';\nimport { Button as AriaButton, type ButtonProps as AriaButtonProps } from 'react-aria-components';\nimport { Icon } from './Icon';\nimport { cx } from '../utils/cx';\n\nexport interface ButtonProps extends Omit<AriaButtonProps, 'className' | 'children'> {\n children?: React.ReactNode;\n /** primary = one per view. secondary = default action. tertiary = low-stakes/inline.\n * danger = destructive. emphasized = on the dark shell. */\n variant?: 'primary' | 'secondary' | 'tertiary' | 'danger' | 'emphasized';\n /** sm = table rows & toolbars, md = default forms, lg = full-width CTAs. */\n size?: 'sm' | 'md' | 'lg';\n /** Icon slug rendered before the label. */\n icon?: string;\n /** Icon slug rendered after the label. */\n iconEnd?: string;\n fullWidth?: boolean;\n className?: string;\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n { children, variant = 'secondary', size = 'md', icon, iconEnd, fullWidth, className, ...rest }, ref,\n) {\n return (\n <AriaButton ref={ref} className={cx('pire-btn', className)} data-variant={variant} data-size={size}\n data-full-width={fullWidth ? 'true' : undefined} {...rest}>\n {icon ? <Icon name={icon} size={16} /> : null}\n {children}\n {iconEnd ? <Icon name={iconEnd} size={16} /> : null}\n </AriaButton>\n );\n});\n","/** Joins truthy class names. Kept local so the package has no runtime class-name dependency. */\nexport function cx(...parts: Array<string | false | null | undefined>) {\n return parts.filter(Boolean).join(' ');\n}\n","import * as React from 'react';\nimport { Button as AriaButton, type ButtonProps as AriaButtonProps } from 'react-aria-components';\nimport { Icon } from './Icon';\nimport { Tooltip } from '../feedback/Tooltip';\nimport { cx } from '../utils/cx';\n\nexport interface IconButtonProps extends Omit<AriaButtonProps, 'className' | 'children' | 'aria-label'> {\n icon: string;\n /** Required accessible name — also the tooltip text. */\n label: string;\n size?: 'sm' | 'md' | 'lg';\n /** inverse = on the dark shell bar. outlined = standalone beside fields. */\n variant?: 'tertiary' | 'outlined' | 'inverse';\n selected?: boolean;\n /** Suppress the tooltip when the control already sits inside one. */\n hideTooltip?: boolean;\n className?: string;\n}\n\nexport const IconButton = React.forwardRef<HTMLButtonElement, IconButtonProps>(function IconButton(\n { icon, label, size = 'md', variant = 'tertiary', selected, hideTooltip, className, ...rest }, ref,\n) {\n const button = (\n <AriaButton ref={ref} aria-label={label} aria-pressed={selected} className={cx('pire-iconbtn', className)}\n data-size={size} data-variant={variant} data-selected={selected ? 'true' : undefined} {...rest}>\n <Icon name={icon} size={size === 'lg' ? 20 : 16} />\n </AriaButton>\n );\n return hideTooltip ? button : <Tooltip label={label}>{button}</Tooltip>;\n});\n","import type * as React from 'react';\nimport { TooltipTrigger, Tooltip as AriaTooltip, OverlayArrow } from 'react-aria-components';\n\nexport interface TooltipProps {\n /** Short clarifying text — never the only source of an instruction. */\n label: React.ReactNode;\n placement?: 'top' | 'bottom' | 'left' | 'right';\n /** Hover delay in ms. Keyboard focus always shows it immediately. */\n delay?: number;\n /** A single focusable element (Button, IconButton, Link). */\n children: React.ReactNode;\n}\n\nexport function Tooltip({ label, placement = 'top', delay = 500, children }: TooltipProps) {\n return (\n <TooltipTrigger delay={delay} closeDelay={0}>\n {children}\n <AriaTooltip className=\"pire-tooltip\" placement={placement} offset={6}>\n <OverlayArrow><span /></OverlayArrow>\n {label}\n </AriaTooltip>\n </TooltipTrigger>\n );\n}\n","import type * as React from 'react';\nimport { Icon } from './Icon';\nimport { cx } from '../utils/cx';\n\nexport type BadgeStatus = 'positive' | 'critical' | 'negative' | 'informative' | 'neutral';\n\nconst STATUS_ICON: Record<BadgeStatus, string> = {\n positive: 'check-circle-2', critical: 'alert-triangle', negative: 'x-circle',\n informative: 'info', neutral: 'circle',\n};\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Semantic value state. Colour is never the only signal — the icon carries the same meaning. */\n status?: BadgeStatus;\n showIcon?: boolean;\n}\n\n/** Value state on an object or row. Text is the label, never a bare colour dot. */\nexport function Badge({ children, status = 'neutral', showIcon = true, className, ...rest }: BadgeProps) {\n return (\n <span className={cx('pire-badge', className)} data-status={status} {...rest}>\n {showIcon ? <Icon name={STATUS_ICON[status]} size={12} /> : null}\n {children}\n </span>\n );\n}\n","import type * as React from 'react';\nimport { Button as AriaButton } from 'react-aria-components';\nimport { Icon } from './Icon';\nimport { cx } from '../utils/cx';\n\nexport interface TagProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Provide to render the remove affordance — filter tokens, multi-select values. */\n onRemove?: () => void;\n isDisabled?: boolean;\n}\n\n/** A removable token: applied filters, multi-select values. */\nexport function Tag({ children, onRemove, isDisabled, className, ...rest }: TagProps) {\n return (\n <span className={cx('pire-tag', className)} data-disabled={isDisabled ? 'true' : undefined} {...rest}>\n {children}\n {onRemove ? (\n <AriaButton className=\"pire-tag-remove\" isDisabled={isDisabled} onPress={onRemove}\n aria-label={`Remove ${typeof children === 'string' ? children : 'filter'}`}>\n <Icon name=\"x\" size={12} />\n </AriaButton>\n ) : null}\n </span>\n );\n}\n","import type * as React from 'react';\nimport { Icon } from './Icon';\nimport { cx } from '../utils/cx';\n\nexport interface CardProps extends Omit<React.HTMLAttributes<HTMLElement>, 'title'> {\n title?: React.ReactNode;\n subtitle?: React.ReactNode;\n icon?: string;\n /** Header-right actions — usually IconButtons. */\n actions?: React.ReactNode;\n /** Right-aligned footer actions, separated by a hairline. */\n footer?: React.ReactNode;\n /** Raises the shadow on hover and sets a pointer cursor. Pair with onClick and a heading link. */\n interactive?: boolean;\n}\n\nexport function Card({ title, subtitle, icon, actions, footer, interactive, children, className, ...rest }: CardProps) {\n return (\n <section className={cx('pire-card', className)} data-interactive={interactive ? 'true' : undefined} {...rest}>\n {title || actions ? (\n <header className=\"pire-card-head\">\n {icon ? <Icon name={icon} size={20} style={{ color: 'var(--text-secondary)' }} /> : null}\n <div style={{ flex: 1, minWidth: 0 }}>\n <h3 className=\"pire-card-title\">{title}</h3>\n {subtitle ? <p className=\"pire-card-sub\" style={{ margin: 0 }}>{subtitle}</p> : null}\n </div>\n {actions ? <div style={{ display: 'flex', gap: 'var(--sp-1)' }}>{actions}</div> : null}\n </header>\n ) : null}\n {children ? <div className=\"pire-card-body\">{children}</div> : null}\n {footer ? <footer className=\"pire-card-foot\">{footer}</footer> : null}\n </section>\n );\n}\n","import * as React from 'react';\nimport { cx } from '../utils/cx';\n\nexport interface AvatarProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Full name — initials are derived from the first two words. */\n name: string;\n size?: 'sm' | 'md' | 'lg';\n /** Optional photo. Falls back to initials if it fails to load. */\n src?: string;\n}\n\nconst initials = (name: string) => name.trim().split(/\\s+/).slice(0, 2).map((p) => p[0]).join('').toUpperCase();\n\n/** Identity chip for the shell bar, approval lists and history rows. Never the only way a person\n * is named — always sits beside or is labelled with the full name. */\nexport function Avatar({ name, size = 'md', src, className, ...rest }: AvatarProps) {\n const [failed, setFailed] = React.useState(false);\n return (\n <span className={cx('pire-avatar', className)} data-size={size} role=\"img\" aria-label={name} {...rest}>\n {src && !failed\n ? <img src={src} alt=\"\" onError={() => setFailed(true)}\n style={{ width: '100%', height: '100%', borderRadius: 'inherit', objectFit: 'cover' }} />\n : initials(name)}\n </span>\n );\n}\n","import * as React from 'react';\nimport { ToggleButtonGroup, ToggleButton } from 'react-aria-components';\nimport { Icon } from '../core/Icon';\nimport { cx } from '../utils/cx';\n\nexport interface SegmentOption { id: string; label: string; icon?: string; isDisabled?: boolean }\n\nexport interface SegmentedControlProps {\n /** Names the choice for assistive tech, e.g. \"Row density\". */\n 'aria-label': string;\n options: SegmentOption[];\n value?: string;\n defaultValue?: string;\n onChange?: (id: string) => void;\n /** Show icons only; labels move into the accessible name and the tooltip. */\n iconOnly?: boolean;\n size?: 'sm' | 'md';\n className?: string;\n style?: React.CSSProperties;\n}\n\n/** Two to four mutually exclusive view options that change how data is displayed, not what it is:\n * row density, list vs chart, period. For filtering, use Select or Tabs. */\nexport function SegmentedControl({ options, value, defaultValue, onChange, iconOnly, size = 'sm',\n className, style, ...rest }: SegmentedControlProps) {\n const selected = React.useMemo(() => new Set(value ? [value] : defaultValue ? [defaultValue] : []), [value, defaultValue]);\n return (\n <ToggleButtonGroup className={cx('pire-segmented', className)} data-size={size} style={style}\n aria-label={rest['aria-label']} selectionMode=\"single\" disallowEmptySelection\n selectedKeys={selected} onSelectionChange={(keys) => {\n const first = [...keys][0];\n if (first != null) onChange?.(String(first));\n }}>\n {options.map((option) => (\n <ToggleButton key={option.id} id={option.id} className=\"pire-segmented-item\"\n isDisabled={option.isDisabled} aria-label={iconOnly ? option.label : undefined}>\n {option.icon ? <Icon name={option.icon} size={16} /> : null}\n {iconOnly ? null : option.label}\n </ToggleButton>\n ))}\n </ToggleButtonGroup>\n );\n}\n","import type * as React from 'react';\nimport { Icon } from '../core/Icon';\nimport { cx } from '../utils/cx';\n\nexport interface FormFieldProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n label: React.ReactNode;\n /** id of the control this label points at. Required when wrapping a bare control. */\n htmlFor?: string;\n isRequired?: boolean;\n /** Static help text. Hidden while an error is shown. */\n hint?: React.ReactNode;\n /** Error message; rendered in an alert row with an icon. */\n error?: React.ReactNode;\n /** horizontal = right-aligned 160px label column, the ERP detail-form default. */\n layout?: 'stacked' | 'horizontal';\n children?: React.ReactNode;\n}\n\n/** Label + control + hint/error wrapper for controls that do not manage their own label\n * (most Pire controls do — use their `label` prop first). */\nexport function FormField({ label, htmlFor, isRequired, hint, error, layout = 'stacked', children, className, ...rest }: FormFieldProps) {\n return (\n <div className={cx('pire-field', className)} data-layout={layout} {...rest}>\n <label className=\"pire-field-label\" htmlFor={htmlFor}>\n {label}{isRequired ? <span className=\"pire-field-req\" aria-hidden=\"true\">*</span> : null}\n </label>\n {children}\n {error ? (\n <span className=\"pire-field-error\" role=\"alert\"><Icon name=\"alert-circle\" size={12} />{error}</span>\n ) : hint ? <span className=\"pire-field-hint\">{hint}</span> : null}\n </div>\n );\n}\n","import type * as React from 'react';\nimport { TextField, Label, Input as AriaInput, Group, Text, FieldError } from 'react-aria-components';\nimport { Icon } from '../core/Icon';\nimport { cx } from '../utils/cx';\n\nexport interface InputProps {\n label?: React.ReactNode;\n value?: string;\n defaultValue?: string;\n /** Receives the raw string value. */\n onChange?: (value: string) => void;\n placeholder?: string;\n type?: 'text' | 'search' | 'email' | 'number' | 'date' | 'password' | 'tel' | 'url';\n /** Leading icon slug — \"search\", \"calendar\", \"hash\". */\n icon?: string;\n /** Trailing static text: unit, currency, \"of 40\". */\n suffix?: React.ReactNode;\n /** Help text below the field. Replaced by errorMessage when invalid. */\n description?: React.ReactNode;\n errorMessage?: React.ReactNode;\n isInvalid?: boolean;\n isDisabled?: boolean;\n isReadOnly?: boolean;\n isRequired?: boolean;\n size?: 'sm' | 'md' | 'lg';\n /** Right-aligned tabular mono — use for every amount, quantity and ID. */\n numeric?: boolean;\n fullWidth?: boolean;\n name?: string;\n autoFocus?: boolean;\n className?: string;\n style?: React.CSSProperties;\n inputRef?: React.Ref<HTMLInputElement>;\n}\n\n/** Single-line text entry. Labels, descriptions and errors are wired to the input by React Aria,\n * so no manual aria-describedby is ever needed. */\nexport function Input({ label, icon, suffix, description, errorMessage, size = 'md', numeric,\n fullWidth = true, className, style, inputRef, onChange, ...rest }: InputProps) {\n return (\n <TextField className={cx('pire-field', className)} style={style} onChange={onChange}\n validationBehavior=\"aria\" {...rest}>\n {label ? (\n <Label className=\"pire-field-label\">\n {label}{rest.isRequired ? <span className=\"pire-field-req\" aria-hidden=\"true\">*</span> : null}\n </Label>\n ) : null}\n <Group className=\"pire-control\" data-size={size} data-full-width={String(fullWidth)}\n data-invalid={rest.isInvalid ? 'true' : undefined} data-readonly={rest.isReadOnly ? 'true' : undefined}>\n {icon ? <Icon name={icon} size={16} className=\"pire-leading-icon\" /> : null}\n <AriaInput ref={inputRef} className=\"pire-input\" data-numeric={numeric ? 'true' : undefined} />\n {suffix ? <span className=\"pire-affix\">{suffix}</span> : null}\n </Group>\n {description ? <Text slot=\"description\" className=\"pire-field-hint\">{description}</Text> : null}\n <FieldError className=\"pire-field-error\">{errorMessage}</FieldError>\n </TextField>\n );\n}\n","import type * as React from 'react';\nimport { Select as AriaSelect, Label, Button as AriaButton, SelectValue, Popover, ListBox,\n ListBoxItem, Text, FieldError } from 'react-aria-components';\nimport { Icon } from '../core/Icon';\nimport { cx } from '../utils/cx';\n\nexport type SelectOption = string | { value: string; label: string; isDisabled?: boolean };\n\nexport interface SelectProps {\n label?: React.ReactNode;\n value?: string | null;\n defaultValue?: string;\n onChange?: (value: string) => void;\n options?: SelectOption[];\n /** Shown when nothing is selected. */\n placeholder?: string;\n description?: React.ReactNode;\n errorMessage?: React.ReactNode;\n isInvalid?: boolean;\n isDisabled?: boolean;\n isRequired?: boolean;\n size?: 'sm' | 'md' | 'lg';\n fullWidth?: boolean;\n name?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst norm = (o: SelectOption) => (typeof o === 'string' ? { value: o, label: o, isDisabled: false } : o);\n\n/** Single-choice picker. Uses a listbox popover rather than a native <select> so the option\n * rows can carry Pire typography and keyboard behaviour is identical across browsers. */\nexport function Select({ label, value, defaultValue, onChange, options = [], placeholder = 'Select…',\n description, errorMessage, size = 'md', fullWidth = true, className, style, ...rest }: SelectProps) {\n const items = options.map(norm);\n return (\n <AriaSelect className={cx('pire-field', className)} style={style} selectedKey={value}\n defaultSelectedKey={defaultValue} onSelectionChange={(k) => onChange?.(String(k))}\n placeholder={placeholder} validationBehavior=\"aria\" {...rest}>\n {label ? (\n <Label className=\"pire-field-label\">\n {label}{rest.isRequired ? <span className=\"pire-field-req\" aria-hidden=\"true\">*</span> : null}\n </Label>\n ) : null}\n <AriaButton className=\"pire-control\" data-size={size} data-full-width={String(fullWidth)}\n data-invalid={rest.isInvalid ? 'true' : undefined}>\n <SelectValue className=\"pire-select-value\" />\n <Icon name=\"chevron-down\" size={16} className=\"pire-leading-icon\" />\n </AriaButton>\n {description ? <Text slot=\"description\" className=\"pire-field-hint\">{description}</Text> : null}\n <FieldError className=\"pire-field-error\">{errorMessage}</FieldError>\n <Popover className=\"pire-popover\">\n <ListBox className=\"pire-listbox\" items={items}>\n {(item) => (\n <ListBoxItem className=\"pire-option\" id={item.value} textValue={item.label} isDisabled={item.isDisabled}>\n {item.label}\n </ListBoxItem>\n )}\n </ListBox>\n </Popover>\n </AriaSelect>\n );\n}\n","import type * as React from 'react';\nimport { Checkbox as AriaCheckbox, type CheckboxProps as AriaCheckboxProps } from 'react-aria-components';\nimport { Icon } from '../core/Icon';\nimport { cx } from '../utils/cx';\n\nexport interface CheckboxProps extends Omit<AriaCheckboxProps, 'className' | 'children'> {\n label?: React.ReactNode;\n hint?: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n}\n\nexport function Checkbox({ label, hint, children, className, ...rest }: CheckboxProps) {\n return (\n <AriaCheckbox className={cx('pire-choice', className)} {...rest}>\n {({ isSelected, isIndeterminate }) => (\n <>\n <span className=\"pire-choice-box\" aria-hidden=\"true\">\n {isIndeterminate ? <Icon name=\"minus\" size={12} /> : isSelected ? <Icon name=\"check\" size={12} /> : null}\n </span>\n <span>\n {label ?? children}\n {hint ? <span className=\"pire-choice-hint\">{hint}</span> : null}\n </span>\n </>\n )}\n </AriaCheckbox>\n );\n}\n","import type * as React from 'react';\nimport { RadioGroup as AriaRadioGroup, Radio as AriaRadio, Label, Text, FieldError,\n type RadioGroupProps as AriaRadioGroupProps, type RadioProps as AriaRadioProps } from 'react-aria-components';\nimport { cx } from '../utils/cx';\n\nexport interface RadioGroupProps extends Omit<AriaRadioGroupProps, 'className' | 'children'> {\n label?: React.ReactNode;\n description?: React.ReactNode;\n errorMessage?: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n}\n\n/** Radios must live in a group — that is what gives arrow-key navigation and a single tab stop. */\nexport function RadioGroup({ label, description, errorMessage, children, className, ...rest }: RadioGroupProps) {\n return (\n <AriaRadioGroup className={cx('pire-field', className)} validationBehavior=\"aria\" {...rest}>\n {label ? <Label className=\"pire-field-label\">{label}</Label> : null}\n <div className=\"pire-radiogroup\">{children}</div>\n {description ? <Text slot=\"description\" className=\"pire-field-hint\">{description}</Text> : null}\n <FieldError className=\"pire-field-error\">{errorMessage}</FieldError>\n </AriaRadioGroup>\n );\n}\n\nexport interface RadioProps extends Omit<AriaRadioProps, 'className' | 'children'> {\n label?: React.ReactNode;\n hint?: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n}\n\nexport function Radio({ label, hint, children, className, ...rest }: RadioProps) {\n return (\n <AriaRadio className={cx('pire-choice', className)} {...rest}>\n <span className=\"pire-choice-box\" data-radio=\"true\" aria-hidden=\"true\" />\n <span>\n {label ?? children}\n {hint ? <span className=\"pire-choice-hint\">{hint}</span> : null}\n </span>\n </AriaRadio>\n );\n}\n","import type * as React from 'react';\nimport { Switch as AriaSwitch, type SwitchProps as AriaSwitchProps } from 'react-aria-components';\nimport { cx } from '../utils/cx';\n\nexport interface SwitchProps extends Omit<AriaSwitchProps, 'className' | 'children'> {\n label?: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n}\n\n/** Immediate-effect toggle. For settings that need a save step, use a Checkbox. */\nexport function Switch({ label, children, className, ...rest }: SwitchProps) {\n return (\n <AriaSwitch className={cx('pire-choice', className)} {...rest}>\n <span className=\"pire-switch-track\" aria-hidden=\"true\"><span className=\"pire-switch-thumb\" /></span>\n <span>{label ?? children}</span>\n </AriaSwitch>\n );\n}\n","import type * as React from 'react';\nimport { ComboBox as AriaComboBox, Label, Input as AriaInput, Button as AriaButton, Group,\n Popover, ListBox, ListBoxItem, Text, FieldError } from 'react-aria-components';\nimport { Icon } from '../core/Icon';\nimport { cx } from '../utils/cx';\n\nexport interface ComboBoxOption { value: string; label: string; secondary?: string; isDisabled?: boolean }\n\nexport interface ComboBoxProps {\n label?: React.ReactNode;\n value?: string | null;\n defaultValue?: string;\n onChange?: (value: string | null) => void;\n /**\n * Free-text as typed, on every keystroke.\n *\n * Server-side search is only partly supported. `options` is passed to React Aria as\n * `defaultItems`, so React Aria applies its own local \"contains\" filter on top of\n * whatever you supply: any result whose `label` does not literally contain the typed\n * text is hidden client-side, and when the local filter matches nothing the menu\n * closes. Fuzzy, synonym, code-to-description and server-ranked matches are therefore\n * dropped. Use this to observe input (analytics, a debounced prefetch, mirroring the\n * text elsewhere), or for server search only where the returned labels are guaranteed\n * to contain the query as a substring. For true server-driven search with no local\n * filtering, use ValueHelpField.\n */\n onInputChange?: (text: string) => void;\n options?: Array<string | ComboBoxOption>;\n placeholder?: string;\n description?: React.ReactNode;\n errorMessage?: React.ReactNode;\n isInvalid?: boolean;\n isDisabled?: boolean;\n isRequired?: boolean;\n isReadOnly?: boolean;\n /** Allow committing free text that isn't in `options`, instead of reverting to the last valid selection. */\n allowsCustomValue?: boolean;\n size?: 'sm' | 'md' | 'lg';\n fullWidth?: boolean;\n name?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst norm = (o: string | ComboBoxOption): ComboBoxOption =>\n typeof o === 'string' ? { value: o, label: o } : o;\n\n/** Type-ahead picker for lists too long to scroll — material, cost centre, G/L account.\n * Below ~10 fixed options use Select; for master-data search with several columns use ValueHelpField. */\nexport function ComboBox({ label, value, defaultValue, onChange, onInputChange, options = [],\n description, errorMessage, size = 'md', fullWidth = true, className, style, ...rest }: ComboBoxProps) {\n const items = options.map(norm);\n return (\n <AriaComboBox className={cx('pire-field', className)} style={style} selectedKey={value}\n defaultSelectedKey={defaultValue} onSelectionChange={(k) => onChange?.(k == null ? null : String(k))}\n onInputChange={onInputChange} defaultItems={items} menuTrigger=\"input\" validationBehavior=\"aria\" {...rest}>\n {label ? (\n <Label className=\"pire-field-label\">\n {label}{rest.isRequired ? <span className=\"pire-field-req\" aria-hidden=\"true\">*</span> : null}\n </Label>\n ) : null}\n <Group className=\"pire-control\" data-size={size} data-full-width={String(fullWidth)}\n data-invalid={rest.isInvalid ? 'true' : undefined}>\n <Icon name=\"search\" size={16} className=\"pire-leading-icon\" />\n <AriaInput className=\"pire-input\" placeholder={rest.placeholder} />\n <AriaButton className=\"pire-iconbtn\" data-size=\"sm\" aria-label=\"Show suggestions\" style={{ width: 20, height: 20 }}>\n <Icon name=\"chevron-down\" size={16} />\n </AriaButton>\n </Group>\n {description ? <Text slot=\"description\" className=\"pire-field-hint\">{description}</Text> : null}\n <FieldError className=\"pire-field-error\">{errorMessage}</FieldError>\n <Popover className=\"pire-popover\">\n <ListBox className=\"pire-listbox\">\n {(item: ComboBoxOption) => (\n <ListBoxItem className=\"pire-option\" id={item.value} textValue={item.label} isDisabled={item.isDisabled}>\n <span style={{ flex: 1 }}>{item.label}</span>\n {item.secondary ? <span style={{ font: 'var(--type-code)', color: 'var(--text-tertiary)' }}>{item.secondary}</span> : null}\n </ListBoxItem>\n )}\n </ListBox>\n </Popover>\n </AriaComboBox>\n );\n}\n","import type * as React from 'react';\nimport { NumberField as AriaNumberField, Label, Input as AriaInput, Group, Button as AriaButton,\n Text, FieldError } from 'react-aria-components';\nimport { Icon } from '../core/Icon';\nimport { cx } from '../utils/cx';\n\nexport interface NumberFieldProps {\n label?: React.ReactNode;\n /** Accessible name when `label` is omitted — e.g. in a table cell where the column header\n * already carries the visible text. A field with neither is unnamed and fails axe. */\n 'aria-label'?: string;\n value?: number;\n defaultValue?: number;\n onChange?: (value: number) => void;\n minValue?: number;\n maxValue?: number;\n step?: number;\n /** Intl.NumberFormat options — currency, unit, decimals. Locale comes from the app's I18nProvider. */\n formatOptions?: Intl.NumberFormatOptions;\n /** Trailing unit shown after the figure: EA, KG, %. */\n suffix?: React.ReactNode;\n description?: React.ReactNode;\n errorMessage?: React.ReactNode;\n isInvalid?: boolean;\n isDisabled?: boolean;\n isReadOnly?: boolean;\n isRequired?: boolean;\n /** Hide the increment/decrement buttons — typical inside dense table cells. */\n hideStepper?: boolean;\n size?: 'sm' | 'md' | 'lg';\n fullWidth?: boolean;\n name?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\n/** Quantities, prices and any figure the user edits. Always right-aligned tabular mono, with\n * arrow-key and scroll stepping supplied by React Aria. */\nexport function NumberField({ label, suffix, description, errorMessage, hideStepper, size = 'md',\n fullWidth = true, className, style, ...rest }: NumberFieldProps) {\n return (\n <AriaNumberField className={cx('pire-field', className)} style={style} validationBehavior=\"aria\" {...rest}>\n {label ? (\n <Label className=\"pire-field-label\">\n {label}{rest.isRequired ? <span className=\"pire-field-req\" aria-hidden=\"true\">*</span> : null}\n </Label>\n ) : null}\n <Group className=\"pire-control\" data-size={size} data-full-width={String(fullWidth)}\n data-invalid={rest.isInvalid ? 'true' : undefined} data-readonly={rest.isReadOnly ? 'true' : undefined}>\n <AriaInput className=\"pire-input\" data-numeric=\"true\" />\n {suffix ? <span className=\"pire-affix\">{suffix}</span> : null}\n {hideStepper ? null : (\n <span className=\"pire-stepper\">\n <AriaButton slot=\"increment\" className=\"pire-stepper-btn\" aria-label=\"Increase\"><Icon name=\"plus\" size={10} /></AriaButton>\n <AriaButton slot=\"decrement\" className=\"pire-stepper-btn\" aria-label=\"Decrease\"><Icon name=\"minus\" size={10} /></AriaButton>\n </span>\n )}\n </Group>\n {description ? <Text slot=\"description\" className=\"pire-field-hint\">{description}</Text> : null}\n <FieldError className=\"pire-field-error\">{errorMessage}</FieldError>\n </AriaNumberField>\n );\n}\n","import type * as React from 'react';\nimport { DatePicker as AriaDatePicker, Label, Group, DateInput, DateSegment, Button as AriaButton,\n Popover, Dialog as AriaDialog, Calendar, CalendarGrid, CalendarGridHeader, CalendarHeaderCell,\n CalendarGridBody, CalendarCell, Heading, Text, FieldError } from 'react-aria-components';\nimport type { DateValue } from 'react-aria-components';\nimport { Icon } from '../core/Icon';\nimport { cx } from '../utils/cx';\n\nexport interface DatePickerProps {\n label?: React.ReactNode;\n value?: DateValue | null;\n defaultValue?: DateValue | null;\n onChange?: (value: DateValue | null) => void;\n minValue?: DateValue;\n maxValue?: DateValue;\n /** Return true for dates that cannot be picked — factory calendar, blocked periods. */\n isDateUnavailable?: (date: DateValue) => boolean;\n description?: React.ReactNode;\n errorMessage?: React.ReactNode;\n isInvalid?: boolean;\n isDisabled?: boolean;\n isReadOnly?: boolean;\n isRequired?: boolean;\n size?: 'sm' | 'md' | 'lg';\n fullWidth?: boolean;\n name?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\n/** Date entry with a segmented field and a calendar popover. Segments follow the user's locale,\n * so a German user types dd.mm.yyyy without any prop change. Wrap the app in React Aria's\n * I18nProvider to pin a locale. */\nexport function DatePicker({ label, description, errorMessage, size = 'md', fullWidth = true,\n className, style, ...rest }: DatePickerProps) {\n return (\n <AriaDatePicker className={cx('pire-field', className)} style={style} validationBehavior=\"aria\" {...rest}>\n {label ? (\n <Label className=\"pire-field-label\">\n {label}{rest.isRequired ? <span className=\"pire-field-req\" aria-hidden=\"true\">*</span> : null}\n </Label>\n ) : null}\n <Group className=\"pire-control\" data-size={size} data-full-width={String(fullWidth)}\n data-invalid={rest.isInvalid ? 'true' : undefined} data-readonly={rest.isReadOnly ? 'true' : undefined}>\n <DateInput className=\"pire-datefield\">\n {(segment) => <DateSegment segment={segment} className=\"pire-datesegment\" />}\n </DateInput>\n <AriaButton className=\"pire-iconbtn\" data-size=\"sm\" aria-label=\"Open calendar\" style={{ width: 24, height: 24 }}>\n <Icon name=\"calendar\" size={16} />\n </AriaButton>\n </Group>\n {description ? <Text slot=\"description\" className=\"pire-field-hint\">{description}</Text> : null}\n <FieldError className=\"pire-field-error\">{errorMessage}</FieldError>\n <Popover className=\"pire-popover\">\n <AriaDialog>\n <Calendar className=\"pire-calendar\">\n <header className=\"pire-calendar-head\">\n <AriaButton slot=\"previous\" className=\"pire-iconbtn\" data-size=\"sm\" aria-label=\"Previous month\">\n <Icon name=\"chevron-left\" size={16} />\n </AriaButton>\n <Heading className=\"pire-calendar-title\" />\n <AriaButton slot=\"next\" className=\"pire-iconbtn\" data-size=\"sm\" aria-label=\"Next month\">\n <Icon name=\"chevron-right\" size={16} />\n </AriaButton>\n </header>\n <CalendarGrid className=\"pire-calendar-grid\">\n <CalendarGridHeader>\n {(day) => <CalendarHeaderCell>{day}</CalendarHeaderCell>}\n </CalendarGridHeader>\n <CalendarGridBody>\n {(date) => <CalendarCell date={date} className=\"pire-calendar-cell\" />}\n </CalendarGridBody>\n </CalendarGrid>\n </Calendar>\n </AriaDialog>\n </Popover>\n </AriaDatePicker>\n );\n}\n","import * as React from 'react';\nimport { Input } from './Input';\nimport { IconButton } from '../core/IconButton';\nimport { ValueHelpDialog } from '../patterns/ValueHelpDialog';\nimport type { DataTableColumn } from '../data/DataTable';\nimport { cx } from '../utils/cx';\n\nexport interface ValueHelpFieldProps<T extends { id: string | number } = any> {\n label?: React.ReactNode;\n /** The picked record, or null. */\n value?: T | null;\n onChange?: (row: T | null) => void;\n /** How the picked record reads in the closed field. Default: \"id — name\". */\n format?: (row: T) => string;\n /** Records offered in the dialog, and the columns that identify them. */\n rows?: T[];\n columns?: DataTableColumn<T>[];\n dialogTitle?: React.ReactNode;\n placeholder?: string;\n description?: React.ReactNode;\n errorMessage?: React.ReactNode;\n isInvalid?: boolean;\n isDisabled?: boolean;\n isRequired?: boolean;\n /** Provide to render a clear affordance once a record is picked. */\n allowsClear?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}\n\n/** Falls back to \"<id> — <human label>\", probing the usual master-data label fields in order. */\nconst defaultFormat = (row: { id: string | number; [field: string]: unknown }) =>\n [row.id, row.name ?? row.label ?? row.text].filter(Boolean).join(' — ');\n\n/** The ERP field that cannot be typed: a read-only display of the picked master-data record plus\n * the value-help trigger. Pairs Input with ValueHelpDialog so screens stop rewiring both. */\nexport function ValueHelpField<T extends { id: string | number }>({ label, value, onChange, format = defaultFormat,\n rows = [], columns = [], dialogTitle, placeholder = 'Not selected', description, errorMessage,\n isInvalid, isDisabled, isRequired, allowsClear, className, style }: ValueHelpFieldProps<T>) {\n const [open, setOpen] = React.useState(false);\n return (\n <div className={cx(className)} style={style}>\n <div style={{ display: 'flex', gap: 'var(--sp-2)', alignItems: 'flex-end' }}>\n <Input label={label} isReadOnly isInvalid={isInvalid} isDisabled={isDisabled} isRequired={isRequired}\n value={value ? format(value) : ''} placeholder={placeholder}\n description={description} errorMessage={errorMessage} />\n {allowsClear && value ? (\n <IconButton icon=\"x\" label=\"Clear selection\" variant=\"outlined\" isDisabled={isDisabled}\n onPress={() => onChange?.(null)} />\n ) : null}\n <IconButton icon=\"search\" label={typeof label === 'string' ? `Select ${label.toLowerCase()}` : 'Open value help'}\n variant=\"outlined\" isDisabled={isDisabled} onPress={() => setOpen(true)} />\n </div>\n <ValueHelpDialog isOpen={open} onClose={() => setOpen(false)} title={dialogTitle ?? label ?? 'Select a record'}\n columns={columns} rows={rows} onSelect={(row) => onChange?.(row)} />\n </div>\n );\n}\n","import * as React from 'react';\nimport { Dialog } from '../feedback/Dialog';\nimport { Input } from '../forms/Input';\nimport { DataTable, type DataTableColumn } from '../data/DataTable';\nimport { Button } from '../core/Button';\n\nexport interface ValueHelpDialogProps<T extends { id: string | number } = any> {\n isOpen?: boolean;\n title?: React.ReactNode;\n /** Show 2–4 identifying columns, not just the key. */\n columns?: DataTableColumn<T>[];\n rows?: T[];\n searchPlaceholder?: string;\n emptyLabel?: string;\n /** Receives the picked row. */\n onSelect?: (row: T) => void;\n onClose?: () => void;\n}\n\n/** The ERP value help: search a master-data list and pick one record back into a field. */\nexport function ValueHelpDialog<T extends { id: string | number }>({ isOpen, title = 'Select a record',\n columns = [], rows = [], searchPlaceholder = 'Search by ID or name', emptyLabel, onSelect, onClose }: ValueHelpDialogProps<T>) {\n const [query, setQuery] = React.useState('');\n React.useEffect(() => { if (isOpen) setQuery(''); }, [isOpen]);\n const filtered = React.useMemo(() => {\n const q = query.trim().toLowerCase();\n if (!q) return rows;\n return rows.filter((row) => Object.values(row).some((v) => String(v).toLowerCase().includes(q)));\n }, [rows, query]);\n return (\n <Dialog isOpen={isOpen} size=\"lg\" title={title} onClose={onClose}\n footer={<Button variant=\"tertiary\" onPress={onClose}>Cancel</Button>}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 'var(--sp-3)' }}>\n <Input aria-label=\"Search records\" icon=\"search\" type=\"search\" value={query} onChange={setQuery}\n placeholder={searchPlaceholder} autoFocus />\n <DataTable aria-label={typeof title === 'string' ? title : 'Records'} density=\"condensed\"\n columns={columns} rows={filtered} emptyLabel={emptyLabel ?? `No records match “${query}”.`}\n onRowAction={(row) => { onSelect?.(row); onClose?.(); }} />\n </div>\n </Dialog>\n );\n}\n","import type * as React from 'react';\nimport { ModalOverlay, Modal, Dialog as AriaDialog, Heading } from 'react-aria-components';\nimport { IconButton } from '../core/IconButton';\nimport { cx } from '../utils/cx';\n\nexport interface DialogProps {\n isOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n title?: React.ReactNode;\n subtitle?: React.ReactNode;\n children?: React.ReactNode;\n /** Right-aligned actions: cancel first, primary or danger last. */\n footer?: React.ReactNode;\n onClose?: () => void;\n /** sm = confirm, md = edit form, lg = value help / table picker. */\n size?: 'sm' | 'md' | 'lg';\n /** Blocks dismiss on outside click / Esc — use only when data would be lost silently. */\n isDismissable?: boolean;\n showClose?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}\n\n/** Modal dialog. Focus is trapped, the page behind is inert, and Esc closes unless\n * isDismissable is false — all handled by React Aria. */\nexport function Dialog({ isOpen, onOpenChange, title, subtitle, children, footer, onClose,\n size = 'md', isDismissable = true, showClose = true, className, style }: DialogProps) {\n const close = () => { onClose?.(); onOpenChange?.(false); };\n return (\n <ModalOverlay className=\"pire-modal-overlay\" isOpen={isOpen} isDismissable={isDismissable}\n onOpenChange={(o) => { if (!o) close(); }}>\n <Modal className={cx('pire-modal', className)} data-size={size} style={style}>\n <AriaDialog className=\"pire-dialog\">\n {title ? (\n <header className=\"pire-dialog-head\">\n <div style={{ flex: 1, minWidth: 0 }}>\n <Heading slot=\"title\" className=\"pire-dialog-title\">{title}</Heading>\n {subtitle ? <p className=\"pire-dialog-sub\" style={{ margin: 0 }}>{subtitle}</p> : null}\n </div>\n {showClose ? <IconButton icon=\"x\" label=\"Close\" size=\"sm\" onPress={close} /> : null}\n </header>\n ) : null}\n <div className=\"pire-dialog-body\">{children}</div>\n {footer ? <footer className=\"pire-dialog-foot\">{footer}</footer> : null}\n </AriaDialog>\n </Modal>\n </ModalOverlay>\n );\n}\n","import type * as React from 'react';\nimport { Table, TableHeader, TableBody, Column, Row, Cell, type Selection,\n type SortDescriptor } from 'react-aria-components';\nimport { Checkbox } from '../forms/Checkbox';\nimport { Icon } from '../core/Icon';\nimport { cx } from '../utils/cx';\n\nexport interface DataTableColumn<T = any> {\n key: string;\n label: string;\n align?: 'left' | 'right' | 'center';\n width?: number | string;\n /** Right-aligns and switches to tabular mono. Use for every amount, quantity and ID. */\n numeric?: boolean;\n sortable?: boolean;\n render?: (row: T) => React.ReactNode;\n}\n\nexport interface DataTableSort { key: string; dir: 'asc' | 'desc' }\n\nexport interface DataTableProps<T extends { id: string | number } = any> {\n /** Accessible name for the grid — required. */\n 'aria-label': string;\n columns: DataTableColumn<T>[];\n rows: T[];\n /** Row height: 32 / 40 / 48px. Condensed is the analyst default. */\n density?: 'condensed' | 'regular' | 'comfortable';\n selectable?: boolean;\n selected?: Array<string | number>;\n onSelectionChange?: (ids: Array<string | number>) => void;\n sort?: DataTableSort;\n onSortChange?: (sort: DataTableSort) => void;\n onRowAction?: (row: T) => void;\n emptyLabel?: React.ReactNode;\n stickyHeader?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}\n\n/** Records grid. React Aria supplies roving focus, type-ahead, shift-click ranges and\n * screen-reader row/column announcements — do not hand-roll a <table> in product code. */\nexport function DataTable<T extends { id: string | number }>({ columns, rows, density = 'regular',\n selectable, selected, onSelectionChange, sort, onSortChange, onRowAction, stickyHeader = true,\n emptyLabel = 'No records match the current filters.', className, style, ...rest }: DataTableProps<T>) {\n const sortDescriptor: SortDescriptor | undefined = sort\n ? { column: sort.key, direction: sort.dir === 'asc' ? 'ascending' : 'descending' } : undefined;\n const handleSelection = (keys: Selection) => {\n if (keys === 'all') return onSelectionChange?.(rows.map((r) => r.id));\n onSelectionChange?.([...keys] as Array<string | number>);\n };\n return (\n <div className={cx('pire-table-wrap', className)} style={style}>\n <Table className=\"pire-table\" data-density={density} data-sticky={String(stickyHeader)}\n aria-label={rest['aria-label']}\n selectionMode={selectable ? 'multiple' : 'none'}\n selectedKeys={selected ? new Set(selected) : undefined}\n onSelectionChange={handleSelection}\n sortDescriptor={sortDescriptor}\n onSortChange={(d) => onSortChange?.({ key: String(d.column), dir: d.direction === 'ascending' ? 'asc' : 'desc' })}\n onRowAction={onRowAction ? (key) => {\n const row = rows.find((r) => String(r.id) === String(key));\n if (row) onRowAction(row);\n } : undefined}>\n <TableHeader className=\"pire-thead-row\">\n {selectable ? (\n <Column className=\"pire-th\" width={44}>\n <Checkbox slot=\"selection\" aria-label=\"Select all rows\" />\n </Column>\n ) : null}\n {columns.map((c, i) => (\n <Column key={c.key} id={c.key} className=\"pire-th\" isRowHeader={i === 0 && !selectable}\n allowsSorting={c.sortable} width={c.width as never}\n data-align={c.numeric || c.align === 'right' ? 'right' : c.align}\n data-allows-sorting={c.sortable ? 'true' : undefined}>\n <span className=\"pire-th-inner\">\n {c.label}\n {c.sortable ? (\n <Icon size={12} name={sort?.key === c.key ? (sort.dir === 'asc' ? 'arrow-up' : 'arrow-down') : 'chevrons-up-down'}\n style={{ color: sort?.key === c.key ? 'var(--accent-subtle-fg)' : 'var(--text-tertiary)' }} />\n ) : null}\n </span>\n </Column>\n ))}\n </TableHeader>\n <TableBody renderEmptyState={() => <div className=\"pire-table-empty\">{emptyLabel}</div>}>\n {rows.map((row) => (\n <Row key={row.id} id={row.id} className=\"pire-tr\" data-pressable={onRowAction ? 'true' : undefined}>\n {selectable ? <Cell className=\"pire-td\"><Checkbox slot=\"selection\" aria-label=\"Select row\" /></Cell> : null}\n {columns.map((c) => (\n <Cell key={c.key} className=\"pire-td\" data-numeric={c.numeric ? 'true' : undefined}\n style={{ textAlign: c.align && !c.numeric ? c.align : undefined }}>\n {c.render ? c.render(row) : (row as Record<string, React.ReactNode>)[c.key]}\n </Cell>\n ))}\n </Row>\n ))}\n </TableBody>\n </Table>\n </div>\n );\n}\n","import type * as React from 'react';\nimport { IconButton } from '../core/IconButton';\nimport { cx } from '../utils/cx';\n\nexport interface ShellBarProps extends Omit<React.HTMLAttributes<HTMLElement>, 'title'> {\n /** Wordmark at far left, uppercase micro-caps. */\n product?: string;\n /** 1–3 letter monogram tile before the wordmark — stand-in for a customer logo. */\n monogram?: string;\n /** Current app or object title. */\n title?: React.ReactNode;\n onMenu?: () => void;\n onSearch?: () => void;\n /** IconButtons with variant=\"inverse\". */\n actions?: React.ReactNode;\n /** Full name — initials render into the avatar. */\n user?: string;\n}\n\nconst initials = (name: string) => name.trim().split(/\\s+/).slice(0, 2).map((p) => p[0]).join('').toUpperCase();\n\n/** Fixed 48px application chrome. One per page, always the first landmark. */\nexport function ShellBar({ product, monogram, title, onMenu, onSearch, actions, user, className, ...rest }: ShellBarProps) {\n return (\n <header className={cx('pire-shellbar', className)} {...rest}>\n {onMenu ? <IconButton icon=\"menu\" label=\"Open navigation\" variant=\"inverse\" size=\"sm\" onPress={onMenu} /> : null}\n {monogram ? <span className=\"pire-shellbar-mono\" aria-hidden=\"true\">{monogram}</span> : null}\n {product ? <span className=\"pire-shellbar-product\">{product}</span> : null}\n {title ? <span className=\"pire-shellbar-title\">{title}</span> : null}\n <span className=\"pire-shellbar-spacer\" />\n {onSearch ? <IconButton icon=\"search\" label=\"Search\" variant=\"inverse\" size=\"sm\" onPress={onSearch} /> : null}\n {actions}\n {user ? <span className=\"pire-avatar\" title={user} aria-label={user} role=\"img\">{initials(user)}</span> : null}\n </header>\n );\n}\n","import type * as React from 'react';\nimport { Icon } from '../core/Icon';\nimport { Tooltip } from '../feedback/Tooltip';\nimport { Button as AriaButton } from 'react-aria-components';\nimport { cx } from '../utils/cx';\n\nexport interface SideNavItem { id: string; label: string; icon?: string; count?: number }\nexport interface SideNavGroup { label?: string; items: SideNavItem[] }\n\nexport interface SideNavProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onChange'> {\n /** Spaces-and-pages hierarchy: one group per space. */\n groups: SideNavGroup[];\n value?: string;\n /** Fires with the selected item id — not a DOM change event. */\n onChange?: (id: string) => void;\n /** 48px icon rail. Labels move into tooltips. */\n collapsed?: boolean;\n footer?: React.ReactNode;\n}\n\nexport function SideNav({ groups, value, onChange, collapsed, footer, className, ...rest }: SideNavProps) {\n return (\n <nav className={cx('pire-sidenav', className)} data-collapsed={collapsed ? 'true' : undefined}\n aria-label=\"Main navigation\" {...rest}>\n {groups.map((group, gi) => (\n <div className=\"pire-sidenav-group\" key={group.label ?? gi}>\n {group.label && !collapsed ? <div className=\"pire-sidenav-label\">{group.label}</div> : null}\n {group.items.map((item) => {\n const selected = item.id === value;\n const button = (\n <AriaButton key={item.id} className=\"pire-sidenav-item\" data-selected={selected ? 'true' : undefined}\n aria-current={selected ? 'page' : undefined} onPress={() => onChange?.(item.id)}>\n {item.icon ? <Icon name={item.icon} size={16} /> : null}\n {collapsed ? null : <span>{item.label}</span>}\n {item.count != null && !collapsed ? <span className=\"pire-sidenav-count\">{item.count}</span> : null}\n </AriaButton>\n );\n return collapsed ? <Tooltip key={item.id} label={item.label} placement=\"right\">{button}</Tooltip> : button;\n })}\n </div>\n ))}\n {footer ? <div className=\"pire-sidenav-footer\">{footer}</div> : null}\n </nav>\n );\n}\n","import type * as React from 'react';\nimport { Tabs as AriaTabs, TabList, Tab as AriaTab, TabPanel } from 'react-aria-components';\nimport { Icon } from '../core/Icon';\nimport { cx } from '../utils/cx';\n\nexport interface TabItem { id: string; label: string; icon?: string; count?: number; isDisabled?: boolean }\n\nexport interface TabsProps {\n items: TabItem[];\n value?: string;\n defaultValue?: string;\n onChange?: (id: string) => void;\n /** Optional panel content keyed by tab id. Omit when the tabs drive an external region —\n * the panel element is still rendered (empty and unstyled) so the tab's `aria-controls`\n * has something to point at. */\n panels?: Record<string, React.ReactNode>;\n 'aria-label'?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\n/** Peer views of one object. Arrow keys move between tabs; the panel is one tab stop away. */\nexport function Tabs({ items, value, defaultValue, onChange, panels, className, style, ...rest }: TabsProps) {\n return (\n <AriaTabs className={className} style={style} selectedKey={value} defaultSelectedKey={defaultValue}\n onSelectionChange={(k) => onChange?.(String(k))}>\n <TabList className=\"pire-tablist\" items={items} aria-label={rest['aria-label'] ?? 'Views'}>\n {(item) => (\n <AriaTab className={cx('pire-tab')} id={item.id} isDisabled={item.isDisabled}>\n {item.icon ? <Icon name={item.icon} size={16} /> : null}\n {item.label}\n {item.count != null ? <span className=\"pire-tab-count\">{item.count}</span> : null}\n </AriaTab>\n )}\n </TabList>\n {/* Rendered for every tab, with or without `panels`. React Aria puts `aria-controls` on\n the selected tab pointing at that tab's generated tabpanel id unconditionally, so\n omitting the panel leaves the reference dangling: invalid ARIA, and an axe\n `aria-valid-attr-value` failure in any consuming app that drives an external region.\n React Aria mounts only the selected panel, and with no content it is an empty,\n zero-height element — the padded `.pire-tabpanel` box is applied only when there is\n actually content to sit in it. */}\n {items.map((item) => (\n <TabPanel key={item.id} id={item.id} className={panels ? 'pire-tabpanel' : undefined}>\n {panels?.[item.id]}\n </TabPanel>\n ))}\n </AriaTabs>\n );\n}\n","import type * as React from 'react';\nimport { Breadcrumbs as AriaBreadcrumbs, Breadcrumb as AriaBreadcrumb, Link } from 'react-aria-components';\nimport { Icon } from '../core/Icon';\nimport { cx } from '../utils/cx';\n\nexport interface BreadcrumbItem { id?: string; label: string; href?: string }\n\nexport interface BreadcrumbProps {\n /** Ordered trail, current page last. The last item is never a link. */\n items: BreadcrumbItem[];\n onNavigate?: (id: string) => void;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function Breadcrumb({ items, onNavigate, className, style }: BreadcrumbProps) {\n return (\n <AriaBreadcrumbs className={cx('pire-breadcrumbs', className)} style={style} items={items}\n onAction={(key) => onNavigate?.(String(key))}>\n {(item) => {\n const last = items[items.length - 1] === item;\n return (\n <AriaBreadcrumb className=\"pire-breadcrumb\" id={item.id ?? item.label}>\n {last ? item.label : <Link href={item.href}>{item.label}</Link>}\n {last ? null : <Icon name=\"chevron-right\" size={12} style={{ color: 'var(--text-tertiary)' }} />}\n </AriaBreadcrumb>\n );\n }}\n </AriaBreadcrumbs>\n );\n}\n","import type * as React from 'react';\nimport { IconButton } from '../core/IconButton';\nimport { Select } from '../forms/Select';\nimport { cx } from '../utils/cx';\n\nexport interface PaginationProps {\n page?: number;\n pageSize?: number;\n /** Total record count — always shown, so users know the data set size. */\n total?: number;\n onPageChange?: (page: number) => void;\n onPageSizeChange?: (size: number) => void;\n pageSizes?: number[];\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function Pagination({ page = 1, pageSize = 25, total = 0, onPageChange, onPageSizeChange,\n pageSizes = [25, 50, 100], className, style }: PaginationProps) {\n const pages = Math.max(1, Math.ceil(total / pageSize));\n const from = total === 0 ? 0 : (page - 1) * pageSize + 1;\n const to = Math.min(total, page * pageSize);\n return (\n <nav className={cx('pire-pagination', className)} style={style} aria-label=\"Pagination\">\n <span className=\"pire-pagination-count\">{from.toLocaleString()}–{to.toLocaleString()} of {total.toLocaleString()}</span>\n <IconButton icon=\"chevron-left\" label=\"Previous page\" size=\"sm\" variant=\"outlined\"\n isDisabled={page <= 1} onPress={() => onPageChange?.(page - 1)} />\n <span className=\"pire-pagination-count\" aria-live=\"polite\">Page {page} of {pages}</span>\n <IconButton icon=\"chevron-right\" label=\"Next page\" size=\"sm\" variant=\"outlined\"\n isDisabled={page >= pages} onPress={() => onPageChange?.(page + 1)} />\n {onPageSizeChange ? (\n <Select aria-label=\"Rows per page\" size=\"sm\" fullWidth={false} value={String(pageSize)}\n options={pageSizes.map((s) => ({ value: String(s), label: `${s} rows` }))}\n onChange={(v) => onPageSizeChange(Number(v))} style={{ width: 120 }} />\n ) : null}\n </nav>\n );\n}\n","import type * as React from 'react';\nimport { Icon } from '../core/Icon';\nimport { IconButton } from '../core/IconButton';\nimport { cx } from '../utils/cx';\n\nexport type MessageKind = 'info' | 'success' | 'warning' | 'error';\nconst KIND_ICON: Record<MessageKind, string> = {\n info: 'info', success: 'check-circle-2', warning: 'alert-triangle', error: 'alert-octagon',\n};\n\nexport interface InlineMessageProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n kind?: MessageKind;\n /** Message heading. Rich content, not the DOM title/tooltip attribute. */\n title?: React.ReactNode;\n /** Follow-up action, usually a tertiary Button. */\n action?: React.ReactNode;\n /** Provide to render a dismiss affordance. */\n onClose?: () => void;\n}\n\n/** In-page message tied to a region or form. Errors and warnings announce themselves. */\nexport function InlineMessage({ kind = 'info', title, action, onClose, children, className, ...rest }: InlineMessageProps) {\n const assertive = kind === 'error' || kind === 'warning';\n return (\n <div className={cx('pire-msg', className)} data-kind={kind}\n role={assertive ? 'alert' : 'status'} aria-live={assertive ? 'assertive' : 'polite'} {...rest}>\n <Icon name={KIND_ICON[kind]} size={16} style={{ marginTop: 2 }} />\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column', gap: 'var(--sp-1)' }}>\n {title ? <span className=\"pire-msg-title\">{title}</span> : null}\n {children ? <span className=\"pire-msg-body\">{children}</span> : null}\n {action}\n </div>\n {onClose ? <IconButton icon=\"x\" label=\"Dismiss message\" size=\"sm\" onPress={onClose} /> : null}\n </div>\n );\n}\n","import type * as React from 'react';\nimport { ProgressBar as AriaProgressBar, Label } from 'react-aria-components';\nimport { cx } from '../utils/cx';\n\nexport interface ProgressBarProps {\n value?: number;\n minValue?: number;\n maxValue?: number;\n label?: React.ReactNode;\n showValue?: boolean;\n /** Indeterminate work — no percentage is announced. */\n isIndeterminate?: boolean;\n /** Colours the fill — e.g. negative when a budget is overrun. */\n status?: 'informative' | 'positive' | 'critical' | 'negative';\n size?: 'sm' | 'md';\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function ProgressBar({ value = 0, minValue = 0, maxValue = 100, label, showValue = true,\n isIndeterminate, status = 'informative', size = 'md', className, style }: ProgressBarProps) {\n return (\n <AriaProgressBar className={cx('pire-progress', className)} data-status={status} data-size={size}\n value={value} minValue={minValue} maxValue={maxValue} isIndeterminate={isIndeterminate} style={style}>\n {({ percentage, valueText }) => (\n <>\n {label || showValue ? (\n <div className=\"pire-progress-head\">\n {label ? <Label>{label}</Label> : <span />}\n {showValue && !isIndeterminate ? <span className=\"pire-numeric\">{valueText}</span> : null}\n </div>\n ) : null}\n <div className=\"pire-progress-track\">\n <div className=\"pire-progress-fill\" style={{ width: `${isIndeterminate ? 40 : percentage}%` }} />\n </div>\n </>\n )}\n </AriaProgressBar>\n );\n}\n","import * as React from 'react';\nimport { Icon } from '../core/Icon';\nimport { IconButton } from '../core/IconButton';\nimport { cx } from '../utils/cx';\nimport type { MessageKind } from './InlineMessage';\n\nconst KIND_ICON: Record<MessageKind, string> = {\n info: 'info', success: 'check-circle-2', warning: 'alert-triangle', error: 'alert-octagon',\n};\n\nexport interface ToastProps extends React.HTMLAttributes<HTMLDivElement> {\n kind?: MessageKind;\n onClose?: () => void;\n position?: 'bottom-center' | 'bottom-right';\n}\n\n/** Transient confirmation of a completed action. Never use for errors the user must act on —\n * those belong in an InlineMessage next to the cause. */\nexport function Toast({ kind = 'success', onClose, position = 'bottom-center', children, className, ...rest }: ToastProps) {\n return (\n <div className={cx('pire-toast', className)} data-position={position}\n role={kind === 'error' ? 'alert' : 'status'} aria-live={kind === 'error' ? 'assertive' : 'polite'} {...rest}>\n <Icon name={KIND_ICON[kind]} size={16} />\n <span style={{ flex: 1 }}>{children}</span>\n {onClose ? <IconButton icon=\"x\" label=\"Dismiss\" size=\"sm\" variant=\"inverse\" onPress={onClose} /> : null}\n </div>\n );\n}\n\nexport interface ToastItem { id: string; kind?: MessageKind; message: React.ReactNode; timeout?: number }\n\ninterface ToastContextValue { add: (toast: Omit<ToastItem, 'id'>) => string; close: (id: string) => void }\nconst ToastContext = React.createContext<ToastContextValue | null>(null);\n\n/** Queue + live region. Mount once near the app root. */\nexport function ToastProvider({ children, timeout = 6000 }: { children?: React.ReactNode; timeout?: number }) {\n const [toasts, setToasts] = React.useState<ToastItem[]>([]);\n const close = React.useCallback((id: string) => setToasts((t) => t.filter((x) => x.id !== id)), []);\n const add = React.useCallback((toast: Omit<ToastItem, 'id'>) => {\n const id = Math.random().toString(36).slice(2);\n setToasts((t) => [...t, { ...toast, id }]);\n const ms = toast.timeout ?? timeout;\n if (ms > 0) setTimeout(() => close(id), ms);\n return id;\n }, [close, timeout]);\n const value = React.useMemo(() => ({ add, close }), [add, close]);\n return (\n <ToastContext.Provider value={value}>\n {children}\n <div className=\"pire-toast-region\" role=\"region\" aria-label=\"Notifications\">\n {toasts.map((t) => (\n <Toast key={t.id} kind={t.kind} onClose={() => close(t.id)} style={{ position: 'static', transform: 'none' }}>\n {t.message}\n </Toast>\n ))}\n </div>\n </ToastContext.Provider>\n );\n}\n\n/** `const toast = useToast(); toast.add({ kind: 'success', message: 'Order 4500012 released.' })` */\nexport function useToast() {\n const ctx = React.useContext(ToastContext);\n if (!ctx) throw new Error('useToast must be used inside <ToastProvider>');\n return ctx;\n}\n","import type * as React from 'react';\nimport { Button as AriaButton } from 'react-aria-components';\nimport { Icon } from '../core/Icon';\nimport { cx } from '../utils/cx';\n\nexport interface KpiTileProps {\n /** Short metric name. Truncates — the tile shrinks with its grid track. */\n label: React.ReactNode;\n /** Pre-formatted figure — format in the caller's locale, not here. */\n value: React.ReactNode;\n unit?: React.ReactNode;\n /** Comparison figure, e.g. \"+4.2% vs last month\". */\n delta?: React.ReactNode;\n /** Which arrow to draw — purely the direction the number moved. */\n deltaDirection?: 'up' | 'down';\n /** Whether that movement is good news. A rising overdue-invoice count is\n * deltaDirection=\"up\" with deltaTone=\"negative\". Defaults to positive for up. */\n deltaTone?: 'positive' | 'negative' | 'neutral';\n footnote?: React.ReactNode;\n icon?: string;\n /** Tints the value when the KPI itself is out of tolerance. */\n status?: 'neutral' | 'positive' | 'critical' | 'negative';\n onPress?: () => void;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function KpiTile({ label, value, unit, delta, deltaDirection, deltaTone, footnote, icon,\n status = 'neutral', onPress, className, style }: KpiTileProps) {\n const tone = deltaTone ?? (deltaDirection === 'down' ? 'negative' : 'positive');\n const body = (\n <>\n <span className=\"pire-kpi-label\">\n {icon ? <Icon name={icon} size={16} /> : null}{label}\n </span>\n <span className=\"pire-kpi-value\">{value}{unit ? <span className=\"pire-kpi-unit\">{unit}</span> : null}</span>\n {delta ? (\n <span className=\"pire-kpi-delta\" data-tone={tone}>\n {deltaDirection ? <Icon name={deltaDirection === 'up' ? 'trending-up' : 'trending-down'} size={12} /> : null}\n {delta}\n </span>\n ) : null}\n {footnote ? <span className=\"pire-kpi-foot\">{footnote}</span> : null}\n </>\n );\n const props = { className: cx('pire-kpi', className), 'data-status': status, style };\n return onPress\n ? <AriaButton {...props} data-pressable=\"true\" onPress={onPress}>{body}</AriaButton>\n : <div {...props}>{body}</div>;\n}\n","import type * as React from 'react';\nimport { cx } from '../utils/cx';\n\nexport interface ObjectFact { label: string; value: React.ReactNode; numeric?: boolean }\n\nexport interface ObjectHeaderProps extends Omit<React.HTMLAttributes<HTMLElement>, 'title' | 'id'> {\n title: React.ReactNode;\n subtitle?: React.ReactNode;\n /** Technical key — rendered in mono next to the subtitle. Not the DOM id. */\n id?: React.ReactNode;\n /** A <Breadcrumb /> element. */\n breadcrumb?: React.ReactNode;\n /** A <Badge /> carrying the object's value state. */\n badge?: React.ReactNode;\n /** Key/value summary strip. Set numeric for amounts. */\n facts?: ObjectFact[];\n actions?: React.ReactNode;\n}\n\n/** The identity block at the top of any object page: who this record is, its state, its key figures. */\nexport function ObjectHeader({ title, subtitle, id, breadcrumb, badge, facts, actions, className, ...rest }: ObjectHeaderProps) {\n return (\n <header className={cx('pire-objheader', className)} {...rest}>\n {breadcrumb}\n <div className=\"pire-objheader-row\">\n <div style={{ minWidth: 0 }}>\n <h1 className=\"pire-objheader-title\">{title}</h1>\n {subtitle || id ? (\n <div className=\"pire-objheader-sub\">\n {subtitle}\n {id ? <span className=\"pire-objheader-id\">{id}</span> : null}\n </div>\n ) : null}\n </div>\n {badge}\n {actions ? <div className=\"pire-objheader-actions\">{actions}</div> : null}\n </div>\n {facts?.length ? (\n <dl className=\"pire-facts\" style={{ margin: 0 }}>\n {facts.map((fact) => (\n <div key={fact.label}>\n <dt className=\"pire-fact-label\">{fact.label}</dt>\n <dd className=\"pire-fact-value\" data-numeric={fact.numeric ? 'true' : undefined} style={{ margin: 0 }}>\n {fact.value}\n </dd>\n </div>\n ))}\n </dl>\n ) : null}\n </header>\n );\n}\n","import type * as React from 'react';\nimport { Button } from '../core/Button';\nimport { Tag } from '../core/Tag';\nimport { cx } from '../utils/cx';\n\nexport interface ActiveFilter { id: string; label: string }\n\nexport interface FilterBarProps extends React.HTMLAttributes<HTMLElement> {\n /** Filter controls — Inputs and Selects with their own labels. */\n children?: React.ReactNode;\n /** Applied filters, shown as removable Tags. */\n activeFilters?: ActiveFilter[];\n onRemoveFilter?: (id: string) => void;\n onClear?: () => void;\n /** Provide to render the \"Go\" trigger. Pire filters apply explicitly, never live. */\n onGo?: () => void;\n /** e.g. \"1,284 orders\". Announced when it changes. */\n resultLabel?: React.ReactNode;\n actions?: React.ReactNode;\n}\n\nexport function FilterBar({ children, activeFilters = [], onRemoveFilter, onClear, onGo,\n resultLabel, actions, className, ...rest }: FilterBarProps) {\n return (\n <section className={cx('pire-filterbar', className)} aria-label=\"Filters\" {...rest}>\n <div className=\"pire-filterbar-controls\">\n {children}\n {onGo ? <Button variant=\"primary\" onPress={onGo}>Go</Button> : null}\n </div>\n {activeFilters.length || resultLabel || actions ? (\n <div className=\"pire-filterbar-foot\">\n {activeFilters.map((filter) => (\n <Tag key={filter.id} onRemove={onRemoveFilter ? () => onRemoveFilter(filter.id) : undefined}>\n {filter.label}\n </Tag>\n ))}\n {activeFilters.length && onClear ? (\n <Button variant=\"tertiary\" size=\"sm\" onPress={onClear}>Clear all</Button>\n ) : null}\n {resultLabel ? <span className=\"pire-filterbar-result\" aria-live=\"polite\">{resultLabel}</span> : null}\n {actions ? <div className=\"pire-filterbar-actions\">{actions}</div> : null}\n </div>\n ) : null}\n </section>\n );\n}\n","import type * as React from 'react';\nimport { cx } from '../utils/cx';\n\nexport interface DescriptionItem {\n label: React.ReactNode;\n value: React.ReactNode;\n /** Tabular mono — use for every amount, quantity and ID. */\n numeric?: boolean;\n /** Separates and enlarges the row: totals, gross value, balance. */\n emphasis?: boolean;\n /** Rendered after the term — a Tooltip trigger explaining the figure. */\n hint?: React.ReactNode;\n}\n\nexport interface DescriptionListProps extends React.HTMLAttributes<HTMLDListElement> {\n items: DescriptionItem[];\n /** rows = label left / value right (totals panels). grid = caps label above value (detail facts). */\n layout?: 'rows' | 'grid';\n /** Columns when layout is grid. */\n columns?: number;\n}\n\n/** Key/value readout: order totals, stock figures, master-data summaries. Replaces the hand-rolled\n * <dl> that every ERP screen used to carry. */\nexport function DescriptionList({ items, layout = 'rows', columns = 3, className, style, ...rest }: DescriptionListProps) {\n return (\n <dl className={cx('pire-dl', className)} data-layout={layout}\n style={{ ...(layout === 'grid' ? { '--pire-dl-cols': columns } : null), ...style } as React.CSSProperties} {...rest}>\n {items.map((item, i) => (\n <div className=\"pire-dl-row\" key={i} data-emphasis={item.emphasis ? 'true' : undefined}>\n <dt className=\"pire-dl-term\">{item.label}{item.hint}</dt>\n <dd className=\"pire-dl-value\" data-numeric={item.numeric ? 'true' : undefined}>{item.value}</dd>\n </div>\n ))}\n </dl>\n );\n}\n","import type * as React from 'react';\nimport { cx } from '../utils/cx';\n\nexport interface TimelineEntry {\n id?: string;\n /** Pre-formatted timestamp — format in the caller's locale. */\n time: React.ReactNode;\n event: React.ReactNode;\n /** Who or what caused it: a user name, \"System\", an interface id. */\n actor?: React.ReactNode;\n}\n\nexport interface TimelineProps extends React.HTMLAttributes<HTMLOListElement> {\n entries: TimelineEntry[];\n /** Newest first. Default true — audit trails read top-down from now. */\n reverse?: boolean;\n}\n\n/** Document history and audit trail: what happened, when, and who did it. */\nexport function Timeline({ entries, reverse = false, className, ...rest }: TimelineProps) {\n const list = reverse ? [...entries].reverse() : entries;\n return (\n <ol className={cx('pire-timeline', className)} {...rest}>\n {list.map((entry, i) => (\n <li className=\"pire-timeline-item\" key={entry.id ?? i}>\n <span className=\"pire-timeline-time\">{entry.time}</span>\n <span className=\"pire-timeline-text\">{entry.event}</span>\n {entry.actor ? <span className=\"pire-timeline-actor\">{entry.actor}</span> : null}\n </li>\n ))}\n </ol>\n );\n}\n","import type * as React from 'react';\nimport { Button as AriaButton } from 'react-aria-components';\nimport { Icon } from '../core/Icon';\nimport { cx } from '../utils/cx';\n\nexport interface LinkListItem {\n id: string;\n /** Technical key shown in mono — order number, material number. */\n key?: React.ReactNode;\n /** Secondary description, truncated. */\n text?: React.ReactNode;\n icon?: string;\n trailing?: React.ReactNode;\n}\n\nexport interface LinkListProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {\n items: LinkListItem[];\n onSelect?: (id: string) => void;\n /** Names the list for assistive tech, e.g. \"Recently viewed orders\". */\n 'aria-label': string;\n}\n\n/** Compact list of records that navigate somewhere: recently viewed, related documents, shortcuts. */\nexport function LinkList({ items, onSelect, className, ...rest }: LinkListProps) {\n return (\n <div className={cx('pire-linklist', className)} role=\"list\" {...rest}>\n {items.map((item) => (\n <AriaButton key={item.id} className=\"pire-linklist-item\" onPress={() => onSelect?.(item.id)}>\n {item.icon ? <Icon name={item.icon} size={16} style={{ color: 'var(--text-secondary)' }} /> : null}\n {item.key ? <span className=\"pire-linklist-key\">{item.key}</span> : null}\n {item.text ? <span className=\"pire-linklist-text\">{item.text}</span> : null}\n {item.trailing}\n </AriaButton>\n ))}\n </div>\n );\n}\n","import type * as React from 'react';\nimport { cx } from '../utils/cx';\n\nexport interface PageHeaderProps extends Omit<React.HTMLAttributes<HTMLElement>, 'title'> {\n title: React.ReactNode;\n /** One line of context: scope, plant, data timestamp. */\n subtitle?: React.ReactNode;\n actions?: React.ReactNode;\n}\n\n/** Heading block for pages that are not a single object — launchpads, settings, reports.\n * Object pages use ObjectHeader instead. */\nexport function PageHeader({ title, subtitle, actions, className, ...rest }: PageHeaderProps) {\n return (\n <header className={cx('pire-pageheader', className)} {...rest}>\n <div style={{ minWidth: 0 }}>\n <h1 className=\"pire-pageheader-title\">{title}</h1>\n {subtitle ? <p className=\"pire-pageheader-sub\">{subtitle}</p> : null}\n </div>\n {actions ? <div className=\"pire-pageheader-actions\">{actions}</div> : null}\n </header>\n );\n}\n","import type * as React from 'react';\nimport { cx } from '../utils/cx';\n\nexport interface SectionHeaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Uppercase micro-caps eyebrow — the space or group name. */\n title: React.ReactNode;\n /** Count or qualifier shown beside the title. */\n meta?: React.ReactNode;\n /** Usually one tertiary Button: \"Open space\", \"See all\". */\n actions?: React.ReactNode;\n}\n\n/** Divides a long page into named bands. Pairs with a KPI row or a card grid below it. */\nexport function SectionHeader({ title, meta, actions, className, ...rest }: SectionHeaderProps) {\n return (\n <div className={cx('pire-sectionhead', className)} {...rest}>\n <span className=\"pire-eyebrow\">{title}</span>\n {meta ? <span style={{ font: 'var(--type-caption)', color: 'var(--text-tertiary)' }}>{meta}</span> : null}\n {actions ? <div className=\"pire-sectionhead-actions\">{actions}</div> : null}\n </div>\n );\n}\n","import type * as React from 'react';\nimport { cx } from '../utils/cx';\n\nexport interface SelectionBarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Number of selected records. The bar renders nothing at 0. */\n count: number;\n /** Noun for the records, singular. Default \"record\". */\n noun?: string;\n /** What happens on commit — mass posting caveats belong here, not in a toast. */\n children?: React.ReactNode;\n /** Buttons, size=\"sm\". Destructive last. */\n actions?: React.ReactNode;\n}\n\n/** Appears above a table once rows are selected and states exactly how many.\n * The count is announced, so keyboard users know a selection changed. */\nexport function SelectionBar({ count, noun = 'record', children, actions, className, ...rest }: SelectionBarProps) {\n if (!count) return null;\n return (\n <div className={cx('pire-selectionbar', className)} role=\"status\" aria-live=\"polite\" {...rest}>\n <span className=\"pire-selectionbar-count\">\n {count.toLocaleString()} {noun}{count === 1 ? '' : 's'} selected\n </span>\n {children ? <span style={{ color: 'var(--text-secondary)', font: 'var(--type-caption)' }}>{children}</span> : null}\n {actions ? <div className=\"pire-selectionbar-actions\">{actions}</div> : null}\n </div>\n );\n}\n","import type * as React from 'react';\nimport { cx } from '../utils/cx';\n\nexport interface FooterBarProps extends React.HTMLAttributes<HTMLElement> {\n /** Left-hand status: validation summary, draft saved at, total. */\n note?: React.ReactNode;\n /** Commit actions. Cancel first, primary or danger last. */\n actions?: React.ReactNode;\n}\n\n/** Sticky commit bar for create and edit screens: the page scrolls, the decision stays visible.\n * Give the scrolling container bottom padding equal to the bar height. */\nexport function FooterBar({ note, actions, children, className, ...rest }: FooterBarProps) {\n return (\n <footer className={cx('pire-footerbar', className)} {...rest}>\n {note ? <span className=\"pire-footerbar-note\">{note}</span> : null}\n {children}\n {actions ? <div className=\"pire-footerbar-actions\">{actions}</div> : null}\n </footer>\n );\n}\n","import type * as React from 'react';\nimport { Dialog } from '../feedback/Dialog';\nimport { InlineMessage } from '../feedback/InlineMessage';\nimport { Button } from '../core/Button';\n\nexport interface ConfirmDialogProps {\n isOpen?: boolean;\n /** Question form, sentence case: \"Release purchase order?\" */\n title?: React.ReactNode;\n subtitle?: React.ReactNode;\n /** What will happen — rendered as a warning, or an error when tone is danger. */\n consequence?: React.ReactNode;\n /** Extra detail or an opt-in Checkbox. */\n children?: React.ReactNode;\n confirmLabel?: string;\n cancelLabel?: string;\n /** danger = irreversible: red commit button, error-toned consequence. */\n tone?: 'primary' | 'danger';\n /** Disables both buttons and shows \"Working…\" on the commit button. */\n isBusy?: boolean;\n onConfirm?: () => void;\n onCancel?: () => void;\n}\n\n/** Interrupts one irreversible action. Never use for information — that is an InlineMessage. */\nexport function ConfirmDialog({ isOpen, title, subtitle, consequence, children, confirmLabel = 'Confirm',\n cancelLabel = 'Cancel', tone = 'primary', isBusy, onConfirm, onCancel }: ConfirmDialogProps) {\n return (\n <Dialog isOpen={isOpen} size=\"sm\" title={title} subtitle={subtitle} onClose={onCancel}\n isDismissable={!isBusy} showClose={false}\n footer={\n <>\n <Button variant=\"tertiary\" isDisabled={isBusy} onPress={onCancel}>{cancelLabel}</Button>\n <Button variant={tone === 'danger' ? 'danger' : 'primary'} isDisabled={isBusy} onPress={onConfirm}>\n {isBusy ? 'Working…' : confirmLabel}\n </Button>\n </>\n }>\n {consequence ? (\n <InlineMessage kind={tone === 'danger' ? 'error' : 'warning'} style={{ marginBottom: children ? 'var(--sp-3)' : 0 }}>\n {consequence}\n </InlineMessage>\n ) : null}\n {children}\n </Dialog>\n );\n}\n","import type * as React from 'react';\nimport { ModalOverlay, Modal, Dialog as AriaDialog, Heading } from 'react-aria-components';\nimport { IconButton } from '../core/IconButton';\nimport { cx } from '../utils/cx';\n\nexport interface SidePanelProps {\n isOpen?: boolean;\n title?: React.ReactNode;\n subtitle?: React.ReactNode;\n /** Panel width in px. 400 default; 560 for editable forms. */\n width?: number;\n children?: React.ReactNode;\n footer?: React.ReactNode;\n onClose?: () => void;\n className?: string;\n}\n\n/** Right-hand overlay for details and edits that must keep the list in view. */\nexport function SidePanel({ isOpen, title, subtitle, width = 400, children, footer, onClose, className }: SidePanelProps) {\n return (\n <ModalOverlay className=\"pire-sidepanel-overlay\" isOpen={isOpen} isDismissable\n onOpenChange={(o) => { if (!o) onClose?.(); }}>\n <Modal className={cx('pire-sidepanel', className)} style={{ width }}>\n <AriaDialog className=\"pire-dialog\" style={{ height: '100%' }}>\n <header className=\"pire-dialog-head\">\n <div style={{ flex: 1, minWidth: 0 }}>\n <Heading slot=\"title\" className=\"pire-dialog-title\">{title}</Heading>\n {subtitle ? <p className=\"pire-dialog-sub\" style={{ margin: 0 }}>{subtitle}</p> : null}\n </div>\n <IconButton icon=\"x\" label=\"Close panel\" size=\"sm\" onPress={onClose} />\n </header>\n <div className=\"pire-dialog-body\" style={{ flex: 1 }}>{children}</div>\n {footer ? <footer className=\"pire-dialog-foot\">{footer}</footer> : null}\n </AriaDialog>\n </Modal>\n </ModalOverlay>\n );\n}\n","import type * as React from 'react';\nimport { Icon } from '../core/Icon';\nimport { cx } from '../utils/cx';\n\nexport interface EmptyStateProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Icon slug, 24px. Match the domain: \"search\" for no results, \"file-text\" for no records. */\n icon?: string;\n /** Headline. Rich content, not the DOM title/tooltip attribute. */\n title?: React.ReactNode;\n /** The single action that resolves the emptiness. */\n action?: React.ReactNode;\n /** Tighter padding, for inside cards and panels. */\n compact?: boolean;\n}\n\n/** Says what is missing, why, and the one thing to do about it. */\nexport function EmptyState({ icon = 'file-text', title, action, compact, children, className, ...rest }: EmptyStateProps) {\n return (\n <div className={cx('pire-empty', className)} data-compact={compact ? 'true' : undefined} {...rest}>\n <Icon name={icon} size={24} className=\"pire-empty-icon\" />\n {title ? <p className=\"pire-empty-title\" style={{ margin: 0 }}>{title}</p> : null}\n {children ? <p className=\"pire-empty-body\" style={{ margin: 0 }}>{children}</p> : null}\n {action}\n </div>\n );\n}\n"],"mappings":"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","names":["React","import_jsx_runtime","Button","AriaButton","React","import_react_aria_components","import_react_aria_components","import_jsx_runtime","AriaTooltip","import_jsx_runtime","IconButton","AriaButton","import_jsx_runtime","import_react_aria_components","import_jsx_runtime","AriaButton","import_jsx_runtime","React","import_jsx_runtime","React","import_react_aria_components","import_jsx_runtime","import_jsx_runtime","import_react_aria_components","import_jsx_runtime","AriaInput","import_react_aria_components","import_jsx_runtime","AriaSelect","AriaButton","import_react_aria_components","import_jsx_runtime","AriaCheckbox","import_react_aria_components","import_jsx_runtime","AriaRadioGroup","AriaRadio","import_react_aria_components","import_jsx_runtime","AriaSwitch","import_react_aria_components","import_jsx_runtime","norm","AriaComboBox","AriaInput","AriaButton","import_react_aria_components","import_jsx_runtime","AriaNumberField","AriaInput","AriaButton","import_react_aria_components","import_jsx_runtime","AriaDatePicker","AriaButton","AriaDialog","React","React","import_react_aria_components","import_jsx_runtime","AriaDialog","import_react_aria_components","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","initials","import_react_aria_components","import_jsx_runtime","AriaButton","import_react_aria_components","import_jsx_runtime","AriaTabs","AriaTab","import_react_aria_components","import_jsx_runtime","AriaBreadcrumbs","AriaBreadcrumb","import_jsx_runtime","import_jsx_runtime","import_react_aria_components","import_jsx_runtime","AriaProgressBar","React","import_jsx_runtime","KIND_ICON","import_react_aria_components","import_jsx_runtime","AriaButton","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react_aria_components","import_jsx_runtime","AriaButton","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react_aria_components","import_jsx_runtime","AriaDialog","import_jsx_runtime","import_react_aria_components"]}
@@ -0,0 +1,46 @@
1
+ export { Icon, configureIcons, type IconProps, type IconPack, type IconConfig } from './components/core/Icon.cjs';
2
+ export { Button, type ButtonProps } from './components/core/Button.cjs';
3
+ export { IconButton, type IconButtonProps } from './components/core/IconButton.cjs';
4
+ export { Badge, type BadgeProps, type BadgeStatus } from './components/core/Badge.cjs';
5
+ export { Tag, type TagProps } from './components/core/Tag.cjs';
6
+ export { Card, type CardProps } from './components/core/Card.cjs';
7
+ export { Avatar, type AvatarProps } from './components/core/Avatar.cjs';
8
+ export { SegmentedControl, type SegmentedControlProps, type SegmentOption } from './components/core/SegmentedControl.cjs';
9
+ export { FormField, type FormFieldProps } from './components/forms/FormField.cjs';
10
+ export { Input, type InputProps } from './components/forms/Input.cjs';
11
+ export { Select, type SelectProps, type SelectOption } from './components/forms/Select.cjs';
12
+ export { Checkbox, type CheckboxProps } from './components/forms/Checkbox.cjs';
13
+ export { RadioGroup, Radio, type RadioGroupProps, type RadioProps } from './components/forms/Radio.cjs';
14
+ export { Switch, type SwitchProps } from './components/forms/Switch.cjs';
15
+ export { ComboBox, type ComboBoxProps, type ComboBoxOption } from './components/forms/ComboBox.cjs';
16
+ export { NumberField, type NumberFieldProps } from './components/forms/NumberField.cjs';
17
+ export { DatePicker, type DatePickerProps } from './components/forms/DatePicker.cjs';
18
+ export { ValueHelpField, type ValueHelpFieldProps } from './components/forms/ValueHelpField.cjs';
19
+ export { ShellBar, type ShellBarProps } from './components/navigation/ShellBar.cjs';
20
+ export { SideNav, type SideNavProps, type SideNavItem, type SideNavGroup } from './components/navigation/SideNav.cjs';
21
+ export { Tabs, type TabsProps, type TabItem } from './components/navigation/Tabs.cjs';
22
+ export { Breadcrumb, type BreadcrumbProps, type BreadcrumbItem } from './components/navigation/Breadcrumb.cjs';
23
+ export { Pagination, type PaginationProps } from './components/navigation/Pagination.cjs';
24
+ export { Dialog, type DialogProps } from './components/feedback/Dialog.cjs';
25
+ export { InlineMessage, type InlineMessageProps, type MessageKind } from './components/feedback/InlineMessage.cjs';
26
+ export { ProgressBar, type ProgressBarProps } from './components/feedback/ProgressBar.cjs';
27
+ export { Tooltip, type TooltipProps } from './components/feedback/Tooltip.cjs';
28
+ export { Toast, ToastProvider, useToast, type ToastProps, type ToastItem } from './components/feedback/Toast.cjs';
29
+ export { DataTable, type DataTableProps, type DataTableColumn, type DataTableSort } from './components/data/DataTable.cjs';
30
+ export { KpiTile, type KpiTileProps } from './components/data/KpiTile.cjs';
31
+ export { ObjectHeader, type ObjectHeaderProps, type ObjectFact } from './components/data/ObjectHeader.cjs';
32
+ export { FilterBar, type FilterBarProps, type ActiveFilter } from './components/data/FilterBar.cjs';
33
+ export { DescriptionList, type DescriptionListProps, type DescriptionItem } from './components/data/DescriptionList.cjs';
34
+ export { Timeline, type TimelineProps, type TimelineEntry } from './components/data/Timeline.cjs';
35
+ export { LinkList, type LinkListProps, type LinkListItem } from './components/data/LinkList.cjs';
36
+ export { PageHeader, type PageHeaderProps } from './components/layout/PageHeader.cjs';
37
+ export { SectionHeader, type SectionHeaderProps } from './components/layout/SectionHeader.cjs';
38
+ export { SelectionBar, type SelectionBarProps } from './components/layout/SelectionBar.cjs';
39
+ export { FooterBar, type FooterBarProps } from './components/layout/FooterBar.cjs';
40
+ export { ConfirmDialog, type ConfirmDialogProps } from './components/patterns/ConfirmDialog.cjs';
41
+ export { ValueHelpDialog, type ValueHelpDialogProps } from './components/patterns/ValueHelpDialog.cjs';
42
+ export { SidePanel, type SidePanelProps } from './components/patterns/SidePanel.cjs';
43
+ export { EmptyState, type EmptyStateProps } from './components/patterns/EmptyState.cjs';
44
+ /** Re-exported so apps can compose overlays and collections without a second dependency. */
45
+ export { DialogTrigger, MenuTrigger, Menu, MenuItem, Popover, Separator, I18nProvider } from 'react-aria-components';
46
+ export type { DateValue } from 'react-aria-components';
@@ -0,0 +1,47 @@
1
+ export { Icon, configureIcons, type IconProps, type IconPack, type IconConfig } from './components/core/Icon.js';
2
+ export { Button, type ButtonProps } from './components/core/Button.js';
3
+ export { IconButton, type IconButtonProps } from './components/core/IconButton.js';
4
+ export { Badge, type BadgeProps, type BadgeStatus } from './components/core/Badge.js';
5
+ export { Tag, type TagProps } from './components/core/Tag.js';
6
+ export { Card, type CardProps } from './components/core/Card.js';
7
+ export { Avatar, type AvatarProps } from './components/core/Avatar.js';
8
+ export { SegmentedControl, type SegmentedControlProps, type SegmentOption } from './components/core/SegmentedControl.js';
9
+ export { FormField, type FormFieldProps } from './components/forms/FormField.js';
10
+ export { Input, type InputProps } from './components/forms/Input.js';
11
+ export { Select, type SelectProps, type SelectOption } from './components/forms/Select.js';
12
+ export { Checkbox, type CheckboxProps } from './components/forms/Checkbox.js';
13
+ export { RadioGroup, Radio, type RadioGroupProps, type RadioProps } from './components/forms/Radio.js';
14
+ export { Switch, type SwitchProps } from './components/forms/Switch.js';
15
+ export { ComboBox, type ComboBoxProps, type ComboBoxOption } from './components/forms/ComboBox.js';
16
+ export { NumberField, type NumberFieldProps } from './components/forms/NumberField.js';
17
+ export { DatePicker, type DatePickerProps } from './components/forms/DatePicker.js';
18
+ export { ValueHelpField, type ValueHelpFieldProps } from './components/forms/ValueHelpField.js';
19
+ export { ShellBar, type ShellBarProps } from './components/navigation/ShellBar.js';
20
+ export { SideNav, type SideNavProps, type SideNavItem, type SideNavGroup } from './components/navigation/SideNav.js';
21
+ export { Tabs, type TabsProps, type TabItem } from './components/navigation/Tabs.js';
22
+ export { Breadcrumb, type BreadcrumbProps, type BreadcrumbItem } from './components/navigation/Breadcrumb.js';
23
+ export { Pagination, type PaginationProps } from './components/navigation/Pagination.js';
24
+ export { Dialog, type DialogProps } from './components/feedback/Dialog.js';
25
+ export { InlineMessage, type InlineMessageProps, type MessageKind } from './components/feedback/InlineMessage.js';
26
+ export { ProgressBar, type ProgressBarProps } from './components/feedback/ProgressBar.js';
27
+ export { Tooltip, type TooltipProps } from './components/feedback/Tooltip.js';
28
+ export { Toast, ToastProvider, useToast, type ToastProps, type ToastItem } from './components/feedback/Toast.js';
29
+ export { DataTable, type DataTableProps, type DataTableColumn, type DataTableSort } from './components/data/DataTable.js';
30
+ export { KpiTile, type KpiTileProps } from './components/data/KpiTile.js';
31
+ export { ObjectHeader, type ObjectHeaderProps, type ObjectFact } from './components/data/ObjectHeader.js';
32
+ export { FilterBar, type FilterBarProps, type ActiveFilter } from './components/data/FilterBar.js';
33
+ export { DescriptionList, type DescriptionListProps, type DescriptionItem } from './components/data/DescriptionList.js';
34
+ export { Timeline, type TimelineProps, type TimelineEntry } from './components/data/Timeline.js';
35
+ export { LinkList, type LinkListProps, type LinkListItem } from './components/data/LinkList.js';
36
+ export { PageHeader, type PageHeaderProps } from './components/layout/PageHeader.js';
37
+ export { SectionHeader, type SectionHeaderProps } from './components/layout/SectionHeader.js';
38
+ export { SelectionBar, type SelectionBarProps } from './components/layout/SelectionBar.js';
39
+ export { FooterBar, type FooterBarProps } from './components/layout/FooterBar.js';
40
+ export { ConfirmDialog, type ConfirmDialogProps } from './components/patterns/ConfirmDialog.js';
41
+ export { ValueHelpDialog, type ValueHelpDialogProps } from './components/patterns/ValueHelpDialog.js';
42
+ export { SidePanel, type SidePanelProps } from './components/patterns/SidePanel.js';
43
+ export { EmptyState, type EmptyStateProps } from './components/patterns/EmptyState.js';
44
+ /** Re-exported so apps can compose overlays and collections without a second dependency. */
45
+ export { DialogTrigger, MenuTrigger, Menu, MenuItem, Popover, Separator, I18nProvider } from 'react-aria-components';
46
+ export type { DateValue } from 'react-aria-components';
47
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}