@nodaro/prompts 1.2.1 → 1.3.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.
package/dist/index.js CHANGED
@@ -2533,8 +2533,8 @@ var PEOPLE = [
2533
2533
  { id: "feature-nostril-piercing", label: "Nostril Piercing", dimension: "distinctive-features", description: "Single nostril stud or ring", promptHint: "with a single nostril piercing, a small stud or ring at the nostril" },
2534
2534
  { id: "feature-bare-shoulders", label: "Bare Shoulders", dimension: "distinctive-features", description: "Bare shoulders exposed", promptHint: "with bare shoulders exposed, the line of the collarbone and shoulder muscles uncovered" },
2535
2535
  { id: "feature-collarbone-visible", label: "Collarbone Visible", dimension: "distinctive-features", description: "Prominent collarbone catching light", promptHint: "with a prominent collarbone clearly defined and catching the light" },
2536
- { id: "feature-midriff-visible", label: "Midriff Visible", dimension: "distinctive-features", description: "Exposed midriff between top and bottom", promptHint: "with the midriff exposed, a strip of bare stomach visible between the top and the bottom" },
2537
- { id: "feature-navel-visible", label: "Navel Visible", dimension: "distinctive-features", description: "Visible navel on bare stomach", promptHint: "with a visible navel on a bare stomach" },
2536
+ { id: "feature-midriff-visible", label: "Midriff Visible", dimension: "distinctive-features", description: "Exposed midriff between top and bottom", promptHint: "wearing a cropped style with the midriff visible" },
2537
+ { id: "feature-navel-visible", label: "Navel Visible", dimension: "distinctive-features", description: "Visible navel on bare stomach", promptHint: "with the navel visible" },
2538
2538
  { id: "feature-elongated-neck", label: "Elongated Neck", dimension: "distinctive-features", description: "Long swan-like neck", promptHint: "with an elongated, swan-like neck, long and gracefully extended" },
2539
2539
  { id: "feature-under-eye-circles", label: "Under-Eye Circles", dimension: "distinctive-features", description: "Subtle dark circles under the eyes (distinct from puffy eye-bags)", promptHint: "with subtle dark circles under the eyes" },
2540
2540
  { id: "feature-fangs", label: "Fangs", dimension: "distinctive-features", description: "Visible fangs (vampire / character archetype)", promptHint: "with visible fangs at the canines, character / vampire archetype" },
@@ -2839,7 +2839,13 @@ function buildAgeHint(ageId, customAge) {
2839
2839
  function emitIndependentHints(value) {
2840
2840
  const ids = normalizePickIds(value);
2841
2841
  const out = [];
2842
+ const midriff = ids.includes("feature-midriff-visible");
2843
+ const navel = ids.includes("feature-navel-visible");
2842
2844
  for (const id of ids) {
2845
+ if (midriff && navel && (id === "feature-midriff-visible" || id === "feature-navel-visible")) {
2846
+ if (id === "feature-midriff-visible") out.push("wearing a cropped style, midriff and navel visible");
2847
+ continue;
2848
+ }
2843
2849
  const hint = getPersonPromptHint(id);
2844
2850
  if (hint) out.push(hint);
2845
2851
  }
@@ -3204,6 +3210,7 @@ var STYLINGS = [
3204
3210
  { id: "headwear-bandana", label: "Bandana", dimension: "headwear", description: "Bandana tied around head", promptHint: "wearing a bandana tied around the head" },
3205
3211
  { id: "headwear-hood", label: "Hood", dimension: "headwear", description: "Hooded sweatshirt up", promptHint: "with a hood pulled up over the head" },
3206
3212
  { id: "headwear-crown", label: "Crown", dimension: "headwear", description: "Royal or decorative crown", promptHint: "wearing a crown atop the head" },
3213
+ { id: "headwear-nemes", label: "Nemes Headdress", dimension: "headwear", description: "Striped pharaonic nemes with uraeus", promptHint: "wearing a striped pharaonic nemes headdress with a golden uraeus cobra at the brow" },
3207
3214
  { id: "headwear-helmet", label: "Helmet", dimension: "headwear", description: "Protective helmet", promptHint: "wearing a helmet" },
3208
3215
  { id: "headwear-veil", label: "Veil", dimension: "headwear", description: "Veil draped over face/hair", promptHint: "wearing a veil draped over the head" },
3209
3216
  { id: "headwear-bucket-hat", label: "Bucket Hat", dimension: "headwear", description: "Soft-brimmed casual bucket hat", promptHint: "wearing a soft-brimmed casual bucket hat" },
@@ -3310,6 +3317,7 @@ var STYLINGS = [
3310
3317
  { id: "face-paint-dramatic", label: "Dramatic Face Paint", dimension: "face-paint", description: "Bold artistic face paint", promptHint: "with dramatic, artistic face paint covering portions of the face" },
3311
3318
  { id: "face-paint-costume", label: "Costume Paint", dimension: "face-paint", description: "Cosplay / theatrical paint", promptHint: "with theatrical costume face paint" },
3312
3319
  { id: "face-paint-tribal", label: "Tribal Markings", dimension: "face-paint", description: "Tribal-inspired face markings", promptHint: "with tribal-inspired face markings" },
3320
+ { id: "face-paint-flag", label: "Flag Face Paint", dimension: "face-paint", description: "National flag painted on cheeks, sports-fan", promptHint: "with a national flag painted on the cheeks, sports-fan face paint" },
3313
3321
  { id: "face-paint-warpaint", label: "War Paint", dimension: "face-paint", description: "Warrior war paint streaks", promptHint: "with warrior war paint streaked across the face" },
3314
3322
  // -------------------- Fabric (clothing material) --------------------
3315
3323
  // Clothing-specific fabrics, phrased as "wearing X". Overlaps in vocabulary
@@ -3338,12 +3346,14 @@ var STYLINGS = [
3338
3346
  { id: "outfit-evening-gown", label: "Evening Gown", dimension: "outfit", description: "Floor-length formal gown", promptHint: "dressed in a floor-length evening gown with a fitted bodice and a flowing skirt" },
3339
3347
  { id: "outfit-wedding-dress", label: "Wedding Dress", dimension: "outfit", description: "White wedding gown", promptHint: "dressed in a white wedding gown with intricate lace detailing and a sweeping train" },
3340
3348
  { id: "outfit-cocktail-dress", label: "Cocktail Dress", dimension: "outfit", description: "Knee-length cocktail dress", promptHint: "dressed in a sleek knee-length cocktail dress" },
3349
+ { id: "outfit-sundress", label: "Sundress / Maxi", dimension: "outfit", description: "Flowy halter-neck sundress / patterned maxi", promptHint: "dressed in a flowy halter-neck sundress with a patterned maxi-length skirt" },
3341
3350
  { id: "outfit-lab-coat", label: "Lab Coat", dimension: "outfit", description: "White medical lab coat", promptHint: "wearing a crisp white lab coat layered over the rest of the clothing" },
3342
3351
  { id: "outfit-scrubs", label: "Medical Scrubs", dimension: "outfit", description: "Solid-color medical scrubs", promptHint: "dressed in solid-color medical scrubs \u2014 loose-fit top and matching drawstring pants" },
3343
3352
  { id: "outfit-military", label: "Military Fatigues", dimension: "outfit", description: "Olive-drab military fatigues", promptHint: "dressed in olive-drab military fatigues with utility pockets and a sturdy belt" },
3344
3353
  { id: "outfit-lifeguard", label: "Lifeguard Outfit", dimension: "outfit", description: "Red lifeguard top and shorts", promptHint: "dressed in a bright red lifeguard outfit \u2014 a fitted top and matching shorts" },
3345
3354
  { id: "outfit-athleisure", label: "Athleisure Set", dimension: "outfit", description: "Matching athleisure top and bottom", promptHint: "dressed in a matching athleisure set \u2014 a fitted top and leggings in the same tone" },
3346
3355
  { id: "outfit-tracksuit", label: "Tracksuit", dimension: "outfit", description: "Two-piece zip-front tracksuit", promptHint: "dressed in a two-piece tracksuit \u2014 a zip-front jacket and matching joggers" },
3356
+ { id: "outfit-soccer-jersey", label: "Soccer Jersey", dimension: "outfit", description: "National-team football jersey with crest", promptHint: "wearing a national-team soccer jersey \u2014 team colors and trim with the team crest on the chest" },
3347
3357
  { id: "outfit-bikini", label: "Bikini", dimension: "outfit", description: "Two-piece swimsuit", promptHint: "in a two-piece bikini" },
3348
3358
  { id: "outfit-one-piece-swim", label: "One-Piece Swimsuit", dimension: "outfit", description: "Fitted one-piece swimsuit", promptHint: "in a fitted one-piece swimsuit" },
3349
3359
  { id: "outfit-lingerie", label: "Lingerie Set", dimension: "outfit", description: "Matching lingerie set", promptHint: "in a matching lingerie set" },
@@ -3363,6 +3373,7 @@ var STYLINGS = [
3363
3373
  { id: "outfit-pirate", label: "Pirate", dimension: "outfit", description: "Pirate costume: tricorn hat, sash, frilly shirt, boots", promptHint: "wearing a pirate costume \u2014 a tricorn hat, a frilly shirt with a sash at the waist, and tall leather boots" },
3364
3374
  { id: "outfit-fairy", label: "Fairy", dimension: "outfit", description: "Fantasy fairy: gauzy wings, flower crown, ethereal dress", promptHint: "wearing a fantasy fairy costume \u2014 gauzy translucent wings, a flower crown, and an ethereal flowing dress" },
3365
3375
  { id: "outfit-mermaid", label: "Mermaid", dimension: "outfit", description: "Fantasy mermaid: scaled tail/skirt, shell top, flowing hair", promptHint: "wearing a fantasy mermaid costume \u2014 a scaled tail or fitted scaled skirt, a shell top, and long flowing hair" },
3376
+ { id: "outfit-pharaoh", label: "Pharaoh Regalia", dimension: "outfit", description: "Ancient Egyptian royalty: usekh collar, pectoral, pleated kilt", promptHint: "wearing ancient Egyptian pharaoh regalia \u2014 a broad beaded usekh collar, a jeweled falcon pectoral, and a pleated linen shendyt kilt with golden arm cuffs" },
3366
3377
  // -------------------- Top (upper-body garment) --------------------
3367
3378
  { id: "top-tshirt", label: "T-Shirt", dimension: "top", description: "Plain crewneck t-shirt", promptHint: "wearing a fitted plain crewneck t-shirt with short sleeves" },
3368
3379
  { id: "top-tank", label: "Tank Top", dimension: "top", description: "Scoop-neck tank top", promptHint: "wearing a fitted scoop-neck tank top with thin shoulder straps" },
@@ -3469,6 +3480,8 @@ var STYLINGS = [
3469
3480
  { id: "state-tucked-in", label: "Tucked In", dimension: "wardrobe-state", description: "Top tucked into bottom", promptHint: "the top neatly tucked into the bottom" },
3470
3481
  { id: "state-half-tucked", label: "Half-Tucked", dimension: "wardrobe-state", description: "Front-tucked, back loose", promptHint: "the top half-tucked \u2014 front neatly tucked in, back hanging loose" },
3471
3482
  { id: "state-off-shoulder", label: "Off-Shoulder", dimension: "wardrobe-state", description: "Slipped off one shoulder", promptHint: "the top slipped off one shoulder, baring the skin and collarbone" },
3483
+ { id: "state-halter-neck", label: "Halter Neck", dimension: "wardrobe-state", description: "Straps tied behind the neck", promptHint: "the top cut as a halter \u2014 straps tied behind the neck, shoulders and upper back bare" },
3484
+ { id: "state-plunging-neck", label: "Plunging Neckline", dimension: "wardrobe-state", description: "Deep plunging V neckline", promptHint: "the neckline cut in a deep plunging V" },
3472
3485
  { id: "state-unbuttoned", label: "Unbuttoned", dimension: "wardrobe-state", description: "Open / unbuttoned", promptHint: "the outerwear hanging open and unbuttoned, falling loose at the sides" },
3473
3486
  { id: "state-rolled-sleeves", label: "Rolled Sleeves", dimension: "wardrobe-state", description: "Sleeves rolled up forearm", promptHint: "the sleeves rolled up to the forearm" },
3474
3487
  { id: "state-layered", label: "Layered", dimension: "wardrobe-state", description: "Multiple stacked layers", promptHint: "the outfit composed of multiple stacked layers, each piece visible at the edges" }
@@ -3561,9 +3574,12 @@ function buildStylingHints(data) {
3561
3574
  const hints = [];
3562
3575
  const pre = typeof data.preText === "string" ? data.preText.trim() : "";
3563
3576
  if (pre) hints.push(pre);
3577
+ const lipStateRaw = data.lipState;
3578
+ const boldRedAlready = Array.isArray(lipStateRaw) ? lipStateRaw.includes("lip-state-bold-red") : lipStateRaw === "lip-state-bold-red";
3564
3579
  for (const dimension of STYLING_DIMENSION_ORDER) {
3565
3580
  const field = STYLING_FIELD_BY_DIMENSION[dimension];
3566
3581
  const raw = data[field];
3582
+ if (dimension === "makeup" && boldRedAlready && raw === "makeup-bold-lips") continue;
3567
3583
  if (typeof raw === "string" && raw.length > 0) {
3568
3584
  const hint = getStylingPromptHint(raw);
3569
3585
  if (hint) hints.push(hint);