newcandies 0.1.58 → 0.1.60

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "newcandies",
3
- "version": "0.1.58",
3
+ "version": "0.1.60",
4
4
  "description": "Scaffold Expo Router + Uniwind React Native apps with layered templates.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -0,0 +1,92 @@
1
+ const SF_TO_MATERIAL = {
2
+ // Tab bar icons
3
+ "house": "home-filled",
4
+ "house.fill": "home-filled",
5
+ "creditcard": "credit-card",
6
+ "creditcard.fill": "credit-card",
7
+ "chart.bar": "bar-chart",
8
+ "chart.bar.fill": "bar-chart",
9
+ "person": "person-outline",
10
+ "person.fill": "person",
11
+ // Navigation
12
+ "chevron.left": "chevron-left",
13
+ "chevron.right": "chevron-right",
14
+ "chevron.forward": "chevron-right",
15
+ // Actions
16
+ "plus": "add",
17
+ "checkmark": "check",
18
+ // Search
19
+ "magnifyingglass": "search",
20
+ // Status/Actions
21
+ "checkmark.circle": "check-circle",
22
+ "checkmark.circle.fill": "check-circle",
23
+ "pause.circle": "pause-circle-outline",
24
+ "pause.circle.fill": "pause-circle-filled",
25
+ "play.circle": "play-circle-outline",
26
+ "play.circle.fill": "play-circle-filled",
27
+ // Settings/Profile
28
+ "arrow.right.square": "logout",
29
+ "gearshape": "settings",
30
+ "gearshape.fill": "settings",
31
+ "bell": "notifications-none",
32
+ "bell.fill": "notifications",
33
+ "person.badge.key.fill": "admin-panel-settings",
34
+ "rectangle.portrait.and.arrow.right": "logout",
35
+ "wallet.pass": "account-balance-wallet",
36
+ "dollarsign.circle": "attach-money",
37
+ "paintpalette": "palette",
38
+ "paintpalette.fill": "palette",
39
+ "questionmark.circle": "help-outline",
40
+ "doc.text": "description",
41
+ "doc.text.fill": "description",
42
+ "plus.circle.fill": "add-circle",
43
+ // Calendar/Stats
44
+ "calendar": "calendar-today",
45
+ "calendar.badge.clock": "event",
46
+ "arrow.up.right": "trending-up",
47
+ "chart.pie": "pie-chart",
48
+ "chart.pie.fill": "pie-chart",
49
+ // Categories
50
+ "music.note": "music-note",
51
+ "gamecontroller": "sports-esports",
52
+ "gamecontroller.fill": "sports-esports",
53
+ "briefcase": "work",
54
+ "briefcase.fill": "work",
55
+ "cloud": "cloud",
56
+ "cloud.fill": "cloud",
57
+ "newspaper": "newspaper",
58
+ "newspaper.fill": "newspaper",
59
+ "figure.run": "fitness-center",
60
+ "graduationcap": "school",
61
+ "graduationcap.fill": "school",
62
+ "banknote": "account-balance",
63
+ "banknote.fill": "account-balance",
64
+ "wrench": "build",
65
+ "wrench.fill": "build",
66
+ "square.grid.2x2": "apps",
67
+ "square.grid.2x2.fill": "apps",
68
+ // Auth
69
+ "envelope": "email",
70
+ "envelope.fill": "email",
71
+ "lock": "lock",
72
+ "lock.fill": "lock",
73
+ "eye": "visibility",
74
+ "eye.fill": "visibility",
75
+ "eye.slash": "visibility-off",
76
+ "eye.slash.fill": "visibility-off",
77
+ // Misc
78
+ "xmark": "close",
79
+ "xmark.circle.fill": "cancel",
80
+ "trash": "delete-outline",
81
+ "trash.fill": "delete",
82
+ // Theme icons
83
+ "sun.max.fill": "light-mode",
84
+ "moon.fill": "dark-mode",
85
+ "star.fill": "star",
86
+ "flame.fill": "local-fire-department",
87
+ "drop.fill": "water-drop",
88
+ "leaf.fill": "eco",
89
+ // Fallback
90
+ "questionmark": "help-outline",
91
+ "questionmark.circle.fill": "help",
92
+ };
@@ -0,0 +1,8 @@
1
+ const themes = [
2
+ { name: "light", icon: "sun.max.fill", color: "#d4d4d8" },
3
+ { name: "dark", icon: "moon.fill", color: "#a1a1aa" },
4
+ { name: "gold", icon: "star.fill", color: "#eab308" },
5
+ { name: "coral", icon: "flame.fill", color: "#f87171" },
6
+ { name: "ocean", icon: "drop.fill", color: "#818cf8" },
7
+ { name: "forest", icon: "leaf.fill", color: "#4ade80" },
8
+ ] as const;
@@ -0,0 +1,20 @@
1
+ import { createMMKV } from "react-native-mmkv";
2
+ import type { UniwindConfig } from "uniwind";
3
+ import type { StateStorage } from "zustand/middleware";
4
+
5
+ export const storage = createMMKV({ id: "subscribed-storage" });
6
+
7
+ export const zustandStorage: StateStorage = {
8
+ getItem: name => storage.getString(name) ?? null,
9
+ setItem: (name, value) => storage.set(name, value),
10
+ removeItem: name => storage.remove(name),
11
+ };
12
+
13
+ export const THEME_KEY = "app-theme";
14
+
15
+ export type AppTheme = UniwindConfig["themes"][number] | "system";
16
+
17
+ export function getPersistedTheme(): AppTheme | null {
18
+ return (storage.getString(THEME_KEY) as AppTheme) ?? null;
19
+ }
20
+ export const persistTheme = (theme: AppTheme) => storage.set(THEME_KEY, theme);
@@ -6,7 +6,10 @@ export default function WidgetsScreen() {
6
6
  return (
7
7
  <Screen>
8
8
  <View className="flex-1 items-center justify-center">
9
- <Text variant="subtitle">Widgets coming soon</Text>
9
+ <Text variant="subtitle">Widget starter ready</Text>
10
+ <Text className="mt-2 px-8 text-center text-text-secondary">
11
+ Build your widget files in src/widgets.
12
+ </Text>
10
13
  </View>
11
14
  </Screen>
12
15
  );
@@ -1,6 +1,6 @@
1
- import type { Affirmation, RiseProfile } from "../types";
1
+ import type { Affirmation } from "../types";
2
2
 
3
- export const RISE_PROFILE: RiseProfile = {
3
+ export const RISE_PROFILE = {
4
4
  name: "Rise",
5
5
  tagline: "A tiny pocket of affirmations for the day ahead.",
6
6
  cadence: "19 rotating reminders",
@@ -11,7 +11,6 @@ export const RISE_AFFIRMATIONS: Affirmation[] = [
11
11
  id: "choose-peace",
12
12
  title: "Choose Peace",
13
13
  message: "Today, I choose peace.",
14
- category: "grounding",
15
14
  cue: "Come back to calm",
16
15
  accentColor: "#FF8C61",
17
16
  accentTint: "#FFE2D3",
@@ -21,7 +20,6 @@ export const RISE_AFFIRMATIONS: Affirmation[] = [
21
20
  id: "trust-the-process",
22
21
  title: "Trust Life",
23
22
  message: "I trust the process of my life.",
24
- category: "rest",
25
23
  cue: "Let it unfold",
26
24
  accentColor: "#7AA6FF",
27
25
  accentTint: "#E1EBFF",
@@ -31,7 +29,6 @@ export const RISE_AFFIRMATIONS: Affirmation[] = [
31
29
  id: "past-not-future",
32
30
  title: "Past Released",
33
31
  message: "My past does not define my future.",
34
- category: "confidence",
35
32
  cue: "Face forward",
36
33
  accentColor: "#EC6F66",
37
34
  accentTint: "#FFE4E1",
@@ -41,7 +38,6 @@ export const RISE_AFFIRMATIONS: Affirmation[] = [
41
38
  id: "worthy-of-love",
42
39
  title: "Worthy of Love",
43
40
  message: "I am worthy of love and belonging.",
44
- category: "confidence",
45
41
  cue: "Let yourself belong",
46
42
  accentColor: "#E97892",
47
43
  accentTint: "#FFE0E9",
@@ -51,7 +47,6 @@ export const RISE_AFFIRMATIONS: Affirmation[] = [
51
47
  id: "release-what-serves",
52
48
  title: "Release Gently",
53
49
  message: "I release what no longer serves me.",
54
- category: "rest",
55
50
  cue: "Loosen your grip",
56
51
  accentColor: "#7294E0",
57
52
  accentTint: "#E0E8FB",
@@ -61,7 +56,6 @@ export const RISE_AFFIRMATIONS: Affirmation[] = [
61
56
  id: "fresh-start",
62
57
  title: "Fresh Start",
63
58
  message: "Every day is a fresh start.",
64
- category: "grounding",
65
59
  cue: "Begin again",
66
60
  accentColor: "#FF8E72",
67
61
  accentTint: "#FFE4DA",
@@ -71,7 +65,6 @@ export const RISE_AFFIRMATIONS: Affirmation[] = [
71
65
  id: "creator-story",
72
66
  title: "My Story",
73
67
  message: "I am the creator of my own story.",
74
- category: "confidence",
75
68
  cue: "Write the next line",
76
69
  accentColor: "#C96CE3",
77
70
  accentTint: "#F2E0FA",
@@ -81,7 +74,6 @@ export const RISE_AFFIRMATIONS: Affirmation[] = [
81
74
  id: "joy-natural-state",
82
75
  title: "Natural Joy",
83
76
  message: "Joy is my natural state.",
84
- category: "joy",
85
77
  cue: "Let joy in",
86
78
  accentColor: "#F2A541",
87
79
  accentTint: "#FFF0D8",
@@ -91,7 +83,6 @@ export const RISE_AFFIRMATIONS: Affirmation[] = [
91
83
  id: "guided-wisdom",
92
84
  title: "Infinite Wisdom",
93
85
  message: "I am guided by infinite wisdom.",
94
- category: "focus",
95
86
  cue: "Trust what you know",
96
87
  accentColor: "#5A9BF6",
97
88
  accentTint: "#DDEBFF",
@@ -101,7 +92,6 @@ export const RISE_AFFIRMATIONS: Affirmation[] = [
101
92
  id: "set-boundaries",
102
93
  title: "Clear Boundaries",
103
94
  message: "I can set my own boundaries.",
104
- category: "confidence",
105
95
  cue: "Protect your space",
106
96
  accentColor: "#8C6FF7",
107
97
  accentTint: "#E9E1FF",
@@ -111,7 +101,6 @@ export const RISE_AFFIRMATIONS: Affirmation[] = [
111
101
  id: "receive-love",
112
102
  title: "Receive Love",
113
103
  message: "I am willing to receive love.",
114
- category: "joy",
115
104
  cue: "Stay open",
116
105
  accentColor: "#F59E6C",
117
106
  accentTint: "#FFE7D9",
@@ -121,7 +110,6 @@ export const RISE_AFFIRMATIONS: Affirmation[] = [
121
110
  id: "write-own-story",
122
111
  title: "Write It New",
123
112
  message: "I can write my own story.",
124
- category: "focus",
125
113
  cue: "Author your path",
126
114
  accentColor: "#6D7DF2",
127
115
  accentTint: "#E2E6FF",
@@ -131,7 +119,6 @@ export const RISE_AFFIRMATIONS: Affirmation[] = [
131
119
  id: "savor-moment",
132
120
  title: "Savor Today",
133
121
  message: "I will savor each moment today.",
134
- category: "joy",
135
122
  cue: "Stay with this moment",
136
123
  accentColor: "#F17C65",
137
124
  accentTint: "#FFE3DC",
@@ -141,7 +128,6 @@ export const RISE_AFFIRMATIONS: Affirmation[] = [
141
128
  id: "creator-life",
142
129
  title: "Create My Life",
143
130
  message: "I am the creator of my life.",
144
- category: "focus",
145
131
  cue: "Choose with intention",
146
132
  accentColor: "#5FA8D3",
147
133
  accentTint: "#DDF0FB",
@@ -151,7 +137,6 @@ export const RISE_AFFIRMATIONS: Affirmation[] = [
151
137
  id: "peace-of-god",
152
138
  title: "Inner Peace",
153
139
  message: "I activate the peace of God within myself.",
154
- category: "grounding",
155
140
  cue: "Let peace rise",
156
141
  accentColor: "#57B09C",
157
142
  accentTint: "#D9F3EC",
@@ -161,7 +146,6 @@ export const RISE_AFFIRMATIONS: Affirmation[] = [
161
146
  id: "right-place-right-time",
162
147
  title: "Right Place",
163
148
  message: "I am always at the right place at the right time.",
164
- category: "confidence",
165
149
  cue: "Trust your timing",
166
150
  accentColor: "#E87A5D",
167
151
  accentTint: "#FFE2D9",
@@ -171,7 +155,6 @@ export const RISE_AFFIRMATIONS: Affirmation[] = [
171
155
  id: "not-limited-by-past",
172
156
  title: "Beyond My Past",
173
157
  message: "I am not limited by my past.",
174
- category: "confidence",
175
158
  cue: "Expand beyond old stories",
176
159
  accentColor: "#4E8F8C",
177
160
  accentTint: "#DAF1EF",
@@ -181,7 +164,6 @@ export const RISE_AFFIRMATIONS: Affirmation[] = [
181
164
  id: "accept-myself",
182
165
  title: "Self Acceptance",
183
166
  message: "I accept myself exactly as I am.",
184
- category: "grounding",
185
167
  cue: "Meet yourself kindly",
186
168
  accentColor: "#F0B84A",
187
169
  accentTint: "#FFF1D4",
@@ -191,7 +173,6 @@ export const RISE_AFFIRMATIONS: Affirmation[] = [
191
173
  id: "make-peace-where-i-am",
192
174
  title: "Make Peace",
193
175
  message: "I make peace with where I am.",
194
- category: "rest",
195
176
  cue: "Settle into now",
196
177
  accentColor: "#7C6CF2",
197
178
  accentTint: "#E6E1FF",
@@ -6,7 +6,7 @@ import ScrollView from "@/components/layout/scroll-view";
6
6
  import Squircle from "@/components/layout/squircle";
7
7
  import Text from "@/components/ui/text";
8
8
  import { RISE_AFFIRMATIONS } from "@/data/rise-data";
9
- import { getAffirmationCategoryLabel, getShortDateLabel } from "@/lib/affirmations";
9
+ import { getShortDateLabel } from "@/lib/affirmations";
10
10
 
11
11
  export interface AffirmationTrayProps {
12
12
  affirmationId: string;
@@ -51,7 +51,7 @@ export function AffirmationTray({ affirmationId }: AffirmationTrayProps) {
51
51
 
52
52
  <ScrollView className="px-6 pb-8">
53
53
  <Text className="text-sm font-medium text-text-secondary">
54
- {getShortDateLabel()} • {getAffirmationCategoryLabel(affirmation.category)}
54
+ {getShortDateLabel()}
55
55
  </Text>
56
56
 
57
57
  <Text variant="display" className="mt-3 text-foreground">
@@ -1,49 +1,18 @@
1
- import type { Affirmation, AffirmationCategory } from "../types";
2
-
3
- const longDateFormatter = new Intl.DateTimeFormat("en-US", {
4
- weekday: "long",
5
- month: "long",
6
- day: "numeric",
7
- });
1
+ import type { Affirmation } from "../types";
8
2
 
9
3
  const shortDateFormatter = new Intl.DateTimeFormat("en-US", {
10
4
  month: "short",
11
5
  day: "numeric",
12
6
  });
13
7
 
14
- const CATEGORY_LABELS: Record<AffirmationCategory, string> = {
15
- grounding: "Grounding",
16
- confidence: "Confidence",
17
- focus: "Focus",
18
- joy: "Joy",
19
- rest: "Rest",
20
- };
21
-
22
- function getDayOfYear(date: Date) {
23
- const start = new Date(date.getFullYear(), 0, 0);
24
- const diff = date.getTime() - start.getTime();
25
- const day = 1000 * 60 * 60 * 24;
26
- return Math.floor(diff / day);
27
- }
28
-
29
- export function getAffirmationCategoryLabel(category: AffirmationCategory) {
30
- return CATEGORY_LABELS[category];
31
- }
32
-
33
- export function getTodayLabel(date = new Date()) {
34
- return longDateFormatter.format(date);
35
- }
36
-
37
8
  export function getShortDateLabel(date = new Date()) {
38
9
  return shortDateFormatter.format(date);
39
10
  }
40
11
 
41
- export function getAffirmationRotationIndex(total: number, date = new Date()) {
42
- if (total === 0) {
43
- return 0;
44
- }
45
-
46
- return getDayOfYear(date) % total;
12
+ function getAffirmationRotationIndex(total: number, date = new Date()) {
13
+ const start = new Date(date.getFullYear(), 0, 0);
14
+ const dayOfYear = Math.floor((date.getTime() - start.getTime()) / (1000 * 60 * 60 * 24));
15
+ return dayOfYear % total;
47
16
  }
48
17
 
49
18
  export function getAffirmationDeck<T extends Affirmation>(
@@ -0,0 +1,3 @@
1
+ export const BG = "#1B1413";
2
+ export const TEXT = "#FFF3EC";
3
+ export const TEXT_MUTED = "#C6A796";
@@ -0,0 +1,55 @@
1
+ export const RISE_WIDGET_LOGO_BASE64 = [
2
+ "iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3Cc",
3
+ "ulE8AAAAUGVYSWZNTQAqAAAACAACARIAAwAAAAEAAQAAh2kABAAAAAEAAAAmAAAAAAADoAEAAwAAAAEAAQAAoAIABAAAAAEAAABgoAMABAAAAAEAAABgAAAA",
4
+ "ALvucVAAAAIyaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2",
5
+ "LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVz",
6
+ "Y3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4",
7
+ "bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj42NDA8L2V4aWY6UGl4ZWxZ",
8
+ "RGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NjQwPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6Q29sb3JT",
9
+ "cGFjZT4xPC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2Ny",
10
+ "aXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgoBiwhEAAAPWklEQVR4Ae2cCZAWxRXHZ7/dZWGX+0bkFAKKyCWHlCCHIHJfAQQDqESKIpAoWKUE",
11
+ "hUSKoGUUQwo05a1YkWihUvEKIlRBRUEhgCIiLCAot9zCcnV+/3b7c4Bv7+Xb2a3pqtmer7unp9+/X79+/d6b9bwwhQiECIQIhAiECIQIhAiECIQIhAiECIQI",
12
+ "hAiECIQIhAiECIQIhAiECIQIhAiECAQUgYULF1Zq3br1sAYNGkwiH7xy5cpyAR1qyRqWMSZh8ODBHSpWrLgOyoy7qlWrtmL69OnXlCxqA0jN2LFjW6alpe0S",
13
+ "8E2aNDGjR482V111lZ2ImjVrfrx///6yARx2yRgS3J9SpUqV/wj87t27mwMHDlBkzIYNGwwrwEQiEdOpU6ffUZRQMigOEBUCtWXLlmMSEhJMrVq1zM6dO4W9",
14
+ "OX/+vM2feOIJuwoQTWspSA3Q0EvGULTJli9f3sr9uXPnWtAFvpuAgwcPWlHEKjjfpUuXXiWD6gBRceONN/5G3N+oUSNz9OhROwEXLlww7lLBxIkT7SpghSzg",
15
+ "Z2KAhl+8hwKYpRAtS6HCSNQoOeBdrrLly5cbTRKb9M5FixZVK95UB2j0PXv2bI9oOVW1alXzww8/CGubHPjKlU6ePGk1I01Cx44dBwSIhCyHEsmyJiAV4Jr4",
16
+ "7bffjgTk0gMGDPAQL9769eu9JUuWeAAdHSXtvNTUVK9Pnz6e7r/77rt+5EnRBgG9CfwELF26tCwbbG+BPXLkSAvjc88957EiYkKqSVLbH3/8sdsrr7xSIWaj",
17
+ "sDD3CKDXD6T1eR26Tp06Zfbu3WuGDBliMjIyYPCL9wL9/umnn6wY0jNt27YNvDYUm41yj88VbQmeyYiSobwk0r9/f6906dLeBx984LVp08YrVaqUFTX+AdDe",
18
+ "K1OmjBVDembXrl39KQu1IT9IeblH368BoLsTExPNp59+CpbGYIowX3zxhb3XH/9G7DbjFStWWG2ICdvy7LPPhmIoL6D728rayW/TqlUrc/bsWbNnzx7DPhC9",
19
+ "1+Er1gRIDDVt2lRnAomhfv4+g3YfWBEEcyd///33gwTYoEGDvKSkJK9cuXLe7Nmz7f0bb7zhbdy48SJNSG15zoohiSxSZPfu3cMpC7w2pMEGKk2dOrUBIuRg",
20
+ "SkqKQe0Ew1+SuF4b8rlz5y5bAU4Mff7554ZJM/Sxb8qUKfUCRVxxGMy11147jnGam2++OSbQmo5LxY/7rTpNzk033WRNE/Q1gaJfDg0BAiCQIgiwUvbt2zdc",
21
+ "OA0fPtxjE74MMtpcVuYKVKdn7rzzTlvE3qG+kl19kPJAckXv3r2bo27+F+tnmk69devWvUzlzAlEHcYwW3jNmzf3MN6dHjhwYKc333xzfYznLlAWYZKScXMm",
22
+ "fPPNN5UOHTqUun37dsMmb9Vd3J4J9evXz5gwYcIBVOCz9H02Rj/5KiqSCYBD3cpTbsdw//33l2PDrAxoFbdt2zaFA9eIUaNGea+99lqewXdIaBJGjBjhacPG",
23
+ "jvQ/jHTpiCn7bq0SNCsP+5H6T+FkXff06dMJ1FfhSqXMv8QS2E9Oc/bYj1q8mb5W3nLLLUtQcXfwjvPuffnJC30CGLf6lMyITJs2rdzWrVvT0tPTtfxrQWx1",
24
+ "rhrI59pnzpypAgCVaV+DU20Z6lVeHuLlUrTi4pNPPvGw7RdoAt555x0P7qfLnJMOerqkbemgp4vxeIzPO3LkiL1cL0zEvoYNG/75yy+//AeTcM6V5zUvtAkA",
25
+ "yCQMYS0RGT1PnDjRFoDrAmglCCiP00QTUp7Lcf5F45RdR4QjcsSpXp06dbxu3bp59913X5Y2n4s6yOaHuPz111/3jh8/btVTNRVza3VItZUBD1O3Bb1y5coe",
26
+ "q8TeJycn231EbdXHsWPHPFaoh3blvfXWW56Yg33mHCJp2OrVqxdnM4RsqwplAgA9DSPYLAZ4L6BH3YEixgFboUIFr0aNGh6Oc2vRlFVTv0W0QFe9Lsd9btQC",
27
+ "oCBJQBd20qpAZHpPP/20xv5PfNNyFuVrFRT4gAJAEQxlk/HR/kFLdtiwYd7tt9/uUebhQLccJS7TFUubiQVOQUH391nQvjSBnKw9VrWH4992rRWL+LH30JTC",
28
+ "TeHPsp+I7O4hMAWuXcNAzUsvvcTPrBOck6XuHsQ6UYIvwsBQBv9DlDDkvg0MYCJ0TplIRdFOAKJmrSYA1dEOMohg5mdMIga11Hz22WeWLv1Zt26d9UvDlKZe",
29
+ "vXrL0diK1tjHmBIRN09pQNddd53BBGwHmx+Cg/iMJSbzz9tvv22qV69uT9dXX331hmeeeaZxdtIhbnULFiyozWaqQ44hdsd8/fXXhTIJ6iS/k5KJWTTLTT+u",
30
+ "sb+tyuT8efjhh61tSTSiQLwPzfXjBnBuXsQpsQnq3EYNsHbt2ubdd9919OQLRD3sYn507wclp3u1xyVpJk2aZFAKzNq1itXKvg/Va/UuXrxYt9G0efNm06NH",
31
+ "D8v1bLgXMHP/vcjFTlYTMnPmzF/BHSs0CbJEimtiuQ5zA+DLL79s0LEN9hwLZk7P+OuFHoG6FjSNRf1kNw5NtIC/9dZbDTp+FPxXX33VoCrbfsqWLbuHs8lv",
32
+ "qZTWE9zEQaVC48aN/4aGoCO6JcqJJFHmByrWvdpwnjCcCaIAzps3T8U5Puv6U1tOv9Hn0dUN9h0VX9aHyvA72NUi+48Sp14zfvz46PME/y5F729BVcyDZOBm",
33
+ "g4GWQj0bDdfs1SSIi/wqqgMqVi4AFGyr59z1yCOPqPgy8PzP2waZbXT/wgsvWLek+hg6dKgVZ/72/nu/qNO727VrZ9/NuSYDb9xsuit+EdcMOkKoYDO4x0Yz",
34
+ "C4h77rknS070A4JRzGCGtiBwcraqn0BVG39yz6hsy5YtBrtTdJJURkiLnYisuN//vNpLDDkthxW4le8QBlEcSDM2eOYuQUDa9ddfPwNuOsUT1r+7Zs0a0RsF",
35
+ "ywHhctVhSzKrVq0y6enp+hkF/7333jN4uMzhw4dtuf4IeNRCgxvSlvn7cY1c2aW5q3/ssceiWg5KxPIHH3ywUe4oLAatIDIJbupTqVKlbZoEcoOZ2dEecyKi",
36
+ "ldw40FT25JNP2pWhIN277rrLYG62/elU6jQY1z6nXP05R7/GhZajQ1ZwtZyCzvWjjz56DZz6bxGrkzPmahvhICByAsvVY+wz2pQV9SB/MRZUg8naaGXkpR+1",
37
+ "xb4TlfeYlw/hwvw9xaULSmegn4fAsnip/oqaarUkRblJRjuAc8oFnJL2CWkv7isZleX0rL9e7TUBWkliCMAfT1Hx0HIKOsMQmoLOfS+m6mMinlBy4ZFnAO1D",
38
+ "mX/84Ob2Xo9OnjzZTgDnl7/wM+4TEPcXavIQPxkzZsz4F6vgiEy78g3kNQGWday4PK/Pu/aKplbCYdN306ZNUV+Gqy+xOUteQVcXbrjhBitOADJPKyC3XJ5d",
39
+ "O71T2pRMJzBChr5DiDfgRbICoDuJ065CBhPEgWym+fb75hcwVqF9p9yRnTt3lu+3FDaenowtrrb9IpkAtJhKcF531D6vX7+iCd1kE4/O3W233WbvUQa6clO8",
40
+ "D15RqrK54ag/UGpoixYtikT8SPSwB9mDnu7TOexhNtFB7DDBvw2zGXqhV8V9BUBv0o4dOwaQ26DbohA/QhEm8FiFFtD69evbbw44Y1QkwKBzoaMcpA4JNakN",
41
+ "6HswTUSDbrPbKK9UnThfSf0ryRQBTrIFyR5dcsUQbsvxIpRPj2wArYjPDchqp+Rv+3PJz3/95Xm9Vw9wviEWSNHU+zE914kX08ZVBEFnCqGHvxZxd9xxRzTw",
42
+ "KSdiEQ0edh4bHOXaSotRtBrmDe+jjz6ygVYqy28igtrDaOixOVf78MMP2+W3n0A/h8bTGs3nFP5j63QR5+XErWojU4XsP/omwKVly5ZZ/zMEW5vQ448/nqcV",
43
+ "del71e9DDz1kxRAmdMXXFDhmKlCTAUERopxnCDC4X/RmC76/3jbO/CNv1QMPPGC0h6gvJvOQLKG6lzk6PdN87X/+UrD9v/1969sy9UUQ2dYXX3yxYqAALOhg",
44
+ "ED2pODls5EROZmNZPOXDdUA5kGTx1MlZYKMynm3WrNl8gm8b8R3YBGT3AZXLL0AsqHsk2ofry5+rEV9hGvmflYj/NA0aNJCl9gyHs44FpTlQz3ft2rUNhJ3S",
45
+ "P1eK5aGyCGT+kSOGkPJokaIV5E1znE7I4ya+IZAqW0pEkkfQ39sQOrhcP3Xpa0om3fbhB91/r0r94w9Eo/3+WL/1EaCex689nZ/531ToJDBJhMBZf2RAlkAR",
46
+ "eikQKlNkncAmGtnWq0zcieiyoKC+ZrBZPoX1tGYs4jBNl2MjnY14Oql3Eb8ZddKoL/873b3K58yZE51w4n3su3DkL6aqZKijEFIaWb1KoPAVimiOgqF72fUV",
47
+ "fjJu3LgoJ0qWy5muZ3TB3avYO3rQ3HI9ZTET9Ul9+/btwvtW08A6fmRylnhRcsD7c9U5v4LCEDP3gU1MdPFzxsdCBXHQFJl9VKEmkrmXAsH/ebso/lIRDZio",
48
+ "LfDI9qM4cCQO0mL1nVUZ8fsVCZmcy3vPaCLat29v9OWkS/4JcGXKNRY55tHWjjPhzbLqv1iV88H1KIEg16GfcHfvAJBz3c/1RESsYPI6UH/5V3q5QIDnknH8",
49
+ "DMFtuVPvFwNIndUmr+Te73KVSfwpvFLtOSx2z8Vrgt0EmhLQTGaKIEUzKDmClSuJ6Pnz50ej0FADjxKPI64vsAigjwRF7PHVzfsagy5M4EYh5i5dOh40INsO",
50
+ "Lasb7Yt3gshEOHkeVNjNzhHtcmk8hPxZgtUG58gy9oJ8c31WaPG+VFTYqXK+6z34AcysWbOi//7MjUe5zCRqQ/uSsQLQgKaJIEJTLJ3iOMljqZbuQKUoOvT5",
51
+ "yTS4Ym5B+o6w2beGIZZoPLrYX2yIDC5JOzY56on710Z8gc+uOtGm+CdidzqiQsoDYvcB3JHW8KXfbJKniUxYSDBtEwEUD2p5T+kOHTqMZRVs1Rh0sWGbu+++",
52
+ "2/Tq1cv+Zt/YigpcJR7jueLvgOAk5OlEaTSOYOT8EfT7ReIy6uMeccw7E/RdAyvgT2zO6W5cyhFTJ2AS2Uuu+EHsir/AzS7EJI4ZM6bZV1991YqJOA0Hruc/",
53
+ "IG7ndJzh2hRFzrgihKFXJXi4PR+HN8ckHSGc/ePnn39+NWNT7FKY4oWAOD4eXB8vesL3hAiECIQIhAiECIQIhAiECIQIhAiECIQIhAiECIQIhAiECIQIhAiE",
54
+ "CIQIhAiECIQIgMD/Abc06wUnCyMsAAAAAElFTkSuQmCC",
55
+ ].join("");
@@ -1,22 +1,9 @@
1
- export type AffirmationCategory = "grounding" |
2
- "confidence" |
3
- "focus" |
4
- "joy" |
5
- "rest";
6
-
7
1
  export interface Affirmation {
8
2
  id: string;
9
3
  title: string;
10
4
  message: string;
11
- category: AffirmationCategory;
12
5
  cue: string;
13
6
  accentColor: string;
14
7
  accentTint: string;
15
8
  icon: string;
16
9
  }
17
-
18
- export interface RiseProfile {
19
- name: string;
20
- tagline: string;
21
- cadence: string;
22
- }
@@ -40,7 +40,7 @@
40
40
  {
41
41
  "name": "mini-rise-widgets",
42
42
  "path": "mini-boilerplate/mini-rise-widgets",
43
- "description": "Rise daily affirmations mini boilerplate with widgets-ready setup and empty widgets folder",
43
+ "description": "Rise daily affirmations mini boilerplate with widgets-ready setup, shared widget support files, and an empty widgets folder",
44
44
  "strategy": "standalone"
45
45
  }
46
46
  ],
@@ -110,4 +110,3 @@
110
110
  }
111
111
  ]
112
112
  }
113
-