@pollinations/ui 0.0.2 → 0.1.0-alpha.1

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 (59) hide show
  1. package/README.md +38 -71
  2. package/dist/{Chip-SM52sUbZ.d.cts → Chip-CQCq34kS.d.cts} +1 -1
  3. package/dist/{Chip-C5impfYd.d.ts → Chip-Cj4xG7Te.d.ts} +1 -1
  4. package/dist/app-user-menu/sdk.cjs +497 -0
  5. package/dist/app-user-menu/sdk.cjs.map +1 -0
  6. package/dist/app-user-menu/sdk.d.cts +18 -0
  7. package/dist/app-user-menu/sdk.d.ts +18 -0
  8. package/dist/app-user-menu/sdk.js +469 -0
  9. package/dist/app-user-menu/sdk.js.map +1 -0
  10. package/dist/app.css +94 -3
  11. package/dist/auth/index.cjs +77 -62
  12. package/dist/auth/index.cjs.map +1 -1
  13. package/dist/auth/index.js +77 -62
  14. package/dist/auth/index.js.map +1 -1
  15. package/dist/gen/index.cjs +477 -0
  16. package/dist/gen/index.cjs.map +1 -0
  17. package/dist/gen/index.d.cts +35 -0
  18. package/dist/gen/index.d.ts +35 -0
  19. package/dist/gen/index.js +451 -0
  20. package/dist/gen/index.js.map +1 -0
  21. package/dist/index.cjs +1875 -761
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.d.cts +294 -109
  24. package/dist/index.d.ts +294 -109
  25. package/dist/index.js +1889 -798
  26. package/dist/index.js.map +1 -1
  27. package/dist/styles.css +1 -1
  28. package/dist/theme-jRPPBmld.d.cts +20 -0
  29. package/dist/theme-jRPPBmld.d.ts +20 -0
  30. package/dist/wallet/index.cjs +17 -8
  31. package/dist/wallet/index.cjs.map +1 -1
  32. package/dist/wallet/index.d.cts +2 -2
  33. package/dist/wallet/index.d.ts +2 -2
  34. package/dist/wallet/index.js +17 -8
  35. package/dist/wallet/index.js.map +1 -1
  36. package/package.json +15 -18
  37. package/dist/Button-Bn8pGg6N.d.ts +0 -26
  38. package/dist/Button-CWUBCiIc.d.cts +0 -26
  39. package/dist/auth/sdk.cjs +0 -220
  40. package/dist/auth/sdk.cjs.map +0 -1
  41. package/dist/auth/sdk.d.cts +0 -53
  42. package/dist/auth/sdk.d.ts +0 -53
  43. package/dist/auth/sdk.js +0 -187
  44. package/dist/auth/sdk.js.map +0 -1
  45. package/dist/modality/index.cjs +0 -83
  46. package/dist/modality/index.cjs.map +0 -1
  47. package/dist/modality/index.d.cts +0 -25
  48. package/dist/modality/index.d.ts +0 -25
  49. package/dist/modality/index.js +0 -56
  50. package/dist/modality/index.js.map +0 -1
  51. package/dist/theme-VMRlhqST.d.cts +0 -9
  52. package/dist/theme-VMRlhqST.d.ts +0 -9
  53. package/dist/wallet/sdk.cjs +0 -206
  54. package/dist/wallet/sdk.cjs.map +0 -1
  55. package/dist/wallet/sdk.d.cts +0 -33
  56. package/dist/wallet/sdk.d.ts +0 -33
  57. package/dist/wallet/sdk.js +0 -175
  58. package/dist/wallet/sdk.js.map +0 -1
  59. package/dist/wallet.css +0 -73
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/modules/wallet/Balance.tsx","../../src/lib/cn.ts","../../src/primitives/Chip.tsx","../../src/modules/wallet/format-pollen.ts","../../src/modules/wallet/KeyBudget.tsx","../../src/modules/wallet/KeyExpiry.tsx","../../src/modules/wallet/KeyModels.tsx","../../src/modules/wallet/KeyPrefix.tsx"],"sourcesContent":["import { useAccountBalance, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\nimport { formatPollen } from \"./format-pollen.ts\";\n\nexport type BalanceProps = { className?: string };\n\n/** Renders the logged-in user's pollen balance. `null` until loaded. */\nexport function Balance({ className }: BalanceProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: balance } = useAccountBalance({ enabled: isLoggedIn });\n if (!isLoggedIn || balance == null) return null;\n return (\n <Chip\n data-polli=\"balance\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {formatPollen(balance.balance)} pollen\n </Chip>\n );\n}\n","import { clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({ prefix: \"polli\" });\n\n/** Internal class merge for polli:-prefixed package primitive classes. */\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(...inputs));\n}\n","import type { ComponentPropsWithoutRef, FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\n/** Semantic chip labels for status and metadata badges. */\ntype ChipIntent =\n | \"news\"\n | \"alpha\"\n | \"neutral\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nconst chipSizes = {\n sm: \"polli:px-2 polli:py-0.5 polli:text-xs\",\n md: \"polli:px-2.5 polli:py-0.5 polli:text-sm\",\n lg: \"polli:px-3 polli:py-1 polli:text-sm\",\n} as const;\n\nconst intentClasses: Record<ChipIntent, string> = {\n news: \"polli:bg-[oklch(0.935_0.06_158)] polli:text-[oklch(0.46_0.13_158)]\",\n alpha: \"polli:bg-[oklch(0.93_0.06_300)] polli:text-[oklch(0.42_0.18_300)]\",\n neutral:\n \"polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900\",\n success:\n \"polli:border polli:border-intent-success-border polli:bg-intent-success-bg-light polli:text-intent-success-text\",\n warning:\n \"polli:border polli:border-intent-warning-border polli:bg-intent-warning-bg-light polli:text-intent-warning-text\",\n danger: \"polli:border polli:border-intent-danger-border polli:bg-intent-danger-bg-light polli:text-intent-danger-text\",\n};\n\nexport type ChipProps = ComponentPropsWithoutRef<\"span\"> & {\n /** Override the cascade theme for this chip's subtree. */\n theme?: ThemeName;\n /** Semantic intent. Wins over `theme` when set. */\n intent?: ChipIntent;\n size?: keyof typeof chipSizes;\n};\n\n// Static, rectangular colored container. Round shapes are reserved for buttons.\n// Reads `bg-theme-bg-active` / `text-theme-text-strong` from the cascade unless\n// `intent` is set (semantic, theme-independent).\nexport const Chip: FC<ChipProps> = ({\n theme,\n intent,\n size = \"md\",\n className,\n children,\n ...rest\n}) => {\n const intentClass = intent\n ? intentClasses[intent]\n : \"polli:bg-theme-bg-active polli:text-theme-text-strong\";\n return (\n <span\n {...rest}\n data-theme={theme}\n className={cn(\n \"polli:inline-flex polli:shrink-0 polli:items-center polli:gap-1 polli:rounded-lg polli:font-medium polli:leading-normal\",\n chipSizes[size],\n intentClass,\n className,\n )}\n >\n {children}\n </span>\n );\n};\n","// 5-digit budget for pollen display. Integer takes its space, decimals fill\n// the remainder (capped at 4), floor toward -infinity, trailing zeros stripped.\n// Integers needing >=6 digits switch to compact (K/M/B, 3 sig figs).\n// Decimal point and minus sign do not count toward the budget.\n\nconst BUDGET = 5;\nconst MAX_DECIMALS = 4;\nconst COMPACT_THRESHOLD = 100_000;\n\nfunction floorTo(value: number, decimals: number): number {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\nfunction formatCompact(value: number): string {\n const abs = Math.abs(value);\n const sign = value < 0 ? \"-\" : \"\";\n const [unit, scale] =\n abs >= 1e9\n ? ([\"B\", 1e9] as const)\n : abs >= 1e6\n ? ([\"M\", 1e6] as const)\n : ([\"K\", 1e3] as const);\n const ratio = abs / scale;\n const intDigits = Math.max(1, Math.floor(Math.log10(ratio)) + 1);\n const decimals = Math.max(0, 3 - intDigits);\n const floored = floorTo(ratio, decimals);\n return `${sign}${Number(floored.toFixed(decimals)).toString()}${unit}`;\n}\n\nexport function formatPollen(value: number): string {\n if (!Number.isFinite(value) || value === 0) return \"0\";\n\n const abs = Math.abs(value);\n\n if (abs >= COMPACT_THRESHOLD) return formatCompact(value);\n\n const intDigits = abs >= 1 ? Math.floor(Math.log10(abs)) + 1 : 1;\n const decimals = Math.min(MAX_DECIMALS, Math.max(0, BUDGET - intDigits));\n const floored = floorTo(value, decimals);\n if (floored === 0) return \"0\";\n return Number(floored.toFixed(decimals)).toString();\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\nimport { formatPollen } from \"./format-pollen.ts\";\n\nexport type KeyBudgetProps = { className?: string };\n\n/** Renders the current delegated key's remaining budget. `null` until loaded. */\nexport function KeyBudget({ className }: KeyBudgetProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n const budget = key?.pollenBudget;\n if (!isLoggedIn || budget == null) return null;\n return (\n <Chip\n data-polli=\"key-budget\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {formatPollen(budget)} pollen\n </Chip>\n );\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyExpiryProps = { className?: string };\n\n/** Renders the current delegated key's expiry date (YYYY-MM-DD) or `null`. */\nexport function KeyExpiry({ className }: KeyExpiryProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n if (!isLoggedIn || !key?.expiresAt) return null;\n return (\n <Chip\n data-polli=\"key-expiry\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {key.expiresAt.slice(0, 10)}\n </Chip>\n );\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyModelsProps = { className?: string };\n\n/** Renders \"All models\" or \"N models\" for the current key. `null` until loaded. */\nexport function KeyModels({ className }: KeyModelsProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n if (!isLoggedIn || !key) return null;\n const models = key.permissions?.models ?? null;\n const text =\n models === null\n ? \"All models\"\n : `${models.length} model${models.length === 1 ? \"\" : \"s\"}`;\n return (\n <Chip data-polli=\"key-models\" className={className}>\n {text}\n </Chip>\n );\n}\n","import { useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyPrefixProps = { className?: string };\n\n/** Renders the first 7 chars of the API key followed by bullets. `null` when logged out. */\nexport function KeyPrefix({ className }: KeyPrefixProps = {}) {\n const { apiKey } = useAuthState();\n if (!apiKey) return null;\n return (\n <Chip\n data-polli=\"key-prefix\"\n className={cn(\"polli:font-mono polli:select-none\", className)}\n >\n {apiKey.slice(0, 7)}\n {\"••••••••\"}\n </Chip>\n );\n}\n"],"mappings":"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","names":["useAuthState","jsxs","useAuthState","useAccountKey","useAuthState","jsx","useAuthState","useAccountKey","useAccountKey","useAuthState","jsx","useAuthState","useAccountKey","useAuthState","jsxs","useAuthState"]}
package/dist/wallet.css DELETED
@@ -1,73 +0,0 @@
1
- /** biome-ignore-all lint/suspicious/noUnknownAtRules: tailwind handles it */
2
-
3
- :root {
4
- --polli-color-paid-pale: oklch(0.93 0.09 95.746);
5
- --polli-color-paid-soft: oklch(0.85 0.16 95.746);
6
- --polli-color-paid-deep: #78350f;
7
- --polli-color-tier-pale: oklch(0.93 0.06 55);
8
- --polli-color-tier-soft: oklch(0.83 0.13 55);
9
- --polli-color-tier-deep: #7c3f1e;
10
- }
11
-
12
- @theme inline {
13
- --color-paid-pale: var(--polli-color-paid-pale);
14
- --color-paid-soft: var(--polli-color-paid-soft);
15
- --color-paid-deep: var(--polli-color-paid-deep);
16
- --color-tier-pale: var(--polli-color-tier-pale);
17
- --color-tier-soft: var(--polli-color-tier-soft);
18
- --color-tier-deep: var(--polli-color-tier-deep);
19
- }
20
-
21
- .polli-wallet-chip-paid {
22
- background-color: var(--polli-color-paid-pale);
23
- color: var(--polli-color-paid-deep);
24
- }
25
-
26
- .polli-wallet-chip-tier {
27
- background-color: var(--polli-color-tier-pale);
28
- color: var(--polli-color-tier-deep);
29
- }
30
-
31
- .polli-wallet-panel-paid {
32
- background-color: color-mix(
33
- in oklab,
34
- var(--polli-color-paid-pale) 60%,
35
- transparent
36
- );
37
- color: var(--polli-color-paid-deep);
38
- }
39
-
40
- .polli-wallet-panel-tier {
41
- background-color: color-mix(
42
- in oklab,
43
- var(--polli-color-tier-pale) 60%,
44
- transparent
45
- );
46
- color: var(--polli-color-tier-deep);
47
- }
48
-
49
- .polli-wallet-dot-paid {
50
- background-color: var(--polli-color-paid-soft);
51
- }
52
-
53
- .polli-wallet-dot-tier {
54
- background-color: var(--polli-color-tier-soft);
55
- }
56
-
57
- .polli-wallet-text-paid {
58
- color: var(--polli-color-paid-deep);
59
- }
60
-
61
- .polli-wallet-text-tier {
62
- color: var(--polli-color-tier-deep);
63
- }
64
-
65
- .polli-wallet-balance-value {
66
- font-size: 2.25rem;
67
- }
68
-
69
- @media (min-width: 640px) {
70
- .polli-wallet-balance-value {
71
- font-size: 3rem;
72
- }
73
- }