sa2kit 1.6.50 → 1.6.57

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 (101) hide show
  1. package/dist/booking-BXtkG2ns.d.mts +386 -0
  2. package/dist/booking-BXtkG2ns.d.ts +386 -0
  3. package/dist/bookingAdminService-B2QDjSHJ.d.ts +193 -0
  4. package/dist/bookingAdminService-Dmg7dC6V.d.mts +193 -0
  5. package/dist/cart-CcZ7rQyG.d.mts +176 -0
  6. package/dist/cart-D3o67Q3H.d.ts +176 -0
  7. package/dist/chunk-53WLQ22S.js +119 -0
  8. package/dist/chunk-53WLQ22S.js.map +1 -0
  9. package/dist/{chunk-SHY424RZ.mjs → chunk-6NMIKAE7.mjs} +3 -3
  10. package/dist/{chunk-SHY424RZ.mjs.map → chunk-6NMIKAE7.mjs.map} +1 -1
  11. package/dist/chunk-ANKVXRPY.mjs +30 -0
  12. package/dist/chunk-ANKVXRPY.mjs.map +1 -0
  13. package/dist/{chunk-IZOIVYOW.js → chunk-DENROXAE.js} +2 -2
  14. package/dist/{chunk-IZOIVYOW.js.map → chunk-DENROXAE.js.map} +1 -1
  15. package/dist/chunk-HYZ5C6FY.mjs +3522 -0
  16. package/dist/chunk-HYZ5C6FY.mjs.map +1 -0
  17. package/dist/{chunk-7JN25DJB.js → chunk-IPY26RQH.js} +11 -11
  18. package/dist/{chunk-7JN25DJB.js.map → chunk-IPY26RQH.js.map} +1 -1
  19. package/dist/{chunk-GFVAIT6Y.mjs → chunk-MFG2Y6UR.mjs} +2 -2
  20. package/dist/{chunk-GFVAIT6Y.mjs.map → chunk-MFG2Y6UR.mjs.map} +1 -1
  21. package/dist/chunk-TJZDPOO7.js +34 -0
  22. package/dist/chunk-TJZDPOO7.js.map +1 -0
  23. package/dist/chunk-U7AQC2Z7.js +3542 -0
  24. package/dist/chunk-U7AQC2Z7.js.map +1 -0
  25. package/dist/chunk-UR5TU4MW.mjs +113 -0
  26. package/dist/chunk-UR5TU4MW.mjs.map +1 -0
  27. package/dist/chunk-V6BXO6ZS.mjs +6107 -0
  28. package/dist/chunk-V6BXO6ZS.mjs.map +1 -0
  29. package/dist/chunk-W2NCOORK.js +6138 -0
  30. package/dist/chunk-W2NCOORK.js.map +1 -0
  31. package/dist/iflytek/index.d.mts +109 -0
  32. package/dist/iflytek/index.d.ts +109 -0
  33. package/dist/iflytek/index.js +365 -0
  34. package/dist/iflytek/index.js.map +1 -0
  35. package/dist/iflytek/index.mjs +362 -0
  36. package/dist/iflytek/index.mjs.map +1 -0
  37. package/dist/iflytek/server.d.mts +59 -0
  38. package/dist/iflytek/server.d.ts +59 -0
  39. package/dist/iflytek/server.js +281 -0
  40. package/dist/iflytek/server.js.map +1 -0
  41. package/dist/iflytek/server.mjs +274 -0
  42. package/dist/iflytek/server.mjs.map +1 -0
  43. package/dist/showmasterpiece/db/index.d.mts +3028 -0
  44. package/dist/showmasterpiece/db/index.d.ts +3028 -0
  45. package/dist/showmasterpiece/db/index.js +179 -0
  46. package/dist/showmasterpiece/db/index.js.map +1 -0
  47. package/dist/showmasterpiece/db/index.mjs +6 -0
  48. package/dist/showmasterpiece/db/index.mjs.map +1 -0
  49. package/dist/showmasterpiece/index.d.mts +10 -1729
  50. package/dist/showmasterpiece/index.d.ts +10 -1729
  51. package/dist/showmasterpiece/index.js +435 -9654
  52. package/dist/showmasterpiece/index.js.map +1 -1
  53. package/dist/showmasterpiece/index.mjs +9 -9628
  54. package/dist/showmasterpiece/index.mjs.map +1 -1
  55. package/dist/showmasterpiece/logic/index.d.mts +372 -0
  56. package/dist/showmasterpiece/logic/index.d.ts +372 -0
  57. package/dist/showmasterpiece/logic/index.js +91 -0
  58. package/dist/showmasterpiece/logic/index.js.map +1 -0
  59. package/dist/showmasterpiece/logic/index.mjs +6 -0
  60. package/dist/showmasterpiece/logic/index.mjs.map +1 -0
  61. package/dist/showmasterpiece/server/index.d.mts +3 -2704
  62. package/dist/showmasterpiece/server/index.d.ts +3 -2704
  63. package/dist/showmasterpiece/server/index.js +43 -43
  64. package/dist/showmasterpiece/server/index.mjs +2 -2
  65. package/dist/showmasterpiece/ui/miniapp/index.d.mts +86 -0
  66. package/dist/showmasterpiece/ui/miniapp/index.d.ts +86 -0
  67. package/dist/showmasterpiece/ui/miniapp/index.js +196 -0
  68. package/dist/showmasterpiece/ui/miniapp/index.js.map +1 -0
  69. package/dist/showmasterpiece/ui/miniapp/index.mjs +183 -0
  70. package/dist/showmasterpiece/ui/miniapp/index.mjs.map +1 -0
  71. package/dist/showmasterpiece/ui/web/index.d.mts +600 -0
  72. package/dist/showmasterpiece/ui/web/index.d.ts +600 -0
  73. package/dist/showmasterpiece/ui/web/index.js +131 -0
  74. package/dist/showmasterpiece/ui/web/index.js.map +1 -0
  75. package/dist/showmasterpiece/ui/web/index.mjs +14 -0
  76. package/dist/showmasterpiece/ui/web/index.mjs.map +1 -0
  77. package/dist/types-C4bbgHHW.d.mts +100 -0
  78. package/dist/types-C4bbgHHW.d.ts +100 -0
  79. package/dist/universalFile/server/index.js +5882 -288
  80. package/dist/universalFile/server/index.js.map +1 -1
  81. package/dist/universalFile/server/index.mjs +5796 -5
  82. package/dist/universalFile/server/index.mjs.map +1 -1
  83. package/package.json +45 -4
  84. package/dist/chunk-QROLPPXP.mjs +0 -5797
  85. package/dist/chunk-QROLPPXP.mjs.map +0 -1
  86. package/dist/chunk-VLZ5N6XZ.js +0 -5888
  87. package/dist/chunk-VLZ5N6XZ.js.map +0 -1
  88. package/dist/popupConfig-BznThU1O.d.mts +0 -330
  89. package/dist/popupConfig-BznThU1O.d.ts +0 -330
  90. package/dist/showmasterpiece/migration/index.d.mts +0 -120
  91. package/dist/showmasterpiece/migration/index.d.ts +0 -120
  92. package/dist/showmasterpiece/migration/index.js +0 -595
  93. package/dist/showmasterpiece/migration/index.js.map +0 -1
  94. package/dist/showmasterpiece/migration/index.mjs +0 -589
  95. package/dist/showmasterpiece/migration/index.mjs.map +0 -1
  96. package/dist/showmasterpiece/scripts/index.d.mts +0 -28
  97. package/dist/showmasterpiece/scripts/index.d.ts +0 -28
  98. package/dist/showmasterpiece/scripts/index.js +0 -327
  99. package/dist/showmasterpiece/scripts/index.js.map +0 -1
  100. package/dist/showmasterpiece/scripts/index.mjs +0 -325
  101. package/dist/showmasterpiece/scripts/index.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/showmasterpiece/ui/miniapp/components/PageHeader.tsx","../../../../src/showmasterpiece/ui/miniapp/components/CategoryTabs.tsx","../../../../src/showmasterpiece/ui/miniapp/components/CollectionCard.tsx","../../../../src/showmasterpiece/ui/miniapp/components/BookingSteps.tsx","../../../../src/showmasterpiece/ui/miniapp/components/FormField.tsx","../../../../src/showmasterpiece/ui/miniapp/components/CartItemCard.tsx","../../../../src/showmasterpiece/ui/miniapp/components/HistoryRecordCard.tsx"],"names":["React","View","Text","Button","ScrollView","Image","getCategoryLabel","formatPrice","Input","Textarea"],"mappings":";;;;;;;;;;;AAqBA,IAAM,aAAwC,CAAC,EAAE,OAAO,QAAA,EAAU,OAAA,EAAS,KAAI,KAAM;AACnF,EAAA,uBACEA,uBAAA,CAAA,aAAA,CAACC,eAAA,EAAA,EAAK,SAAA,EAAU,oDAAA,EAAA,wDACbA,eAAA,EAAA,EAAK,SAAA,EAAU,kCAAA,EAAA,kBACdD,uBAAA,CAAA,aAAA,CAACC,uCACCD,uBAAA,CAAA,aAAA,CAACE,eAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAA,EAAyB,KAAM,CAAA,EAC9C,QAAA,oBAAYF,uBAAA,CAAA,aAAA,CAACE,eAAA,EAAA,EAAK,SAAA,EAAU,mCAAA,EAAA,EAAqC,QAAS,CAC7E,GACC,OAAA,IAAW,OAAA,CAAQ,MAAA,GAAS,CAAA,0DAC1BD,eAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAA,EACb,OAAA,CAAQ,IAAI,CAAA,MAAA,qBACXD,uBAAA,CAAA,aAAA;AAAA,IAACG,iBAAA;AAAA,IAAA;AAAA,MACC,KAAK,MAAA,CAAO,KAAA;AAAA,MACZ,SAAA,EACE,MAAA,CAAO,OAAA,KAAY,OAAA,GACf,6FAAA,GACA,qEAAA;AAAA,MAEN,SAAS,MAAA,CAAO;AAAA,KAAA;AAAA,IAEf,MAAA,CAAO;AAAA,GAEX,CACH,CAEJ,CAAA,EACC,GAAA,oBACCH,uBAAA,CAAA,aAAA;AAAA,IAACG,iBAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,2EAAA;AAAA,MACV,SAAS,GAAA,CAAI;AAAA,KAAA;AAAA,IAEZ,GAAA,CAAI;AAAA,GAGX,CAAA;AAEJ,CAAA;AAEA,IAAO,kBAAA,GAAQ;AC7Cf,SAAS,YAAA,CAAwC;AAAA,EAC/C,KAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAAyB;AACvB,EAAA,uBACEH,wBAAA,aAAA,CAACI,qBAAA,EAAA,EAAW,SAAO,IAAA,EAAC,SAAA,EAAU,QAAO,aAAA,EAAe,KAAA,EAAA,kBAClDJ,uBAAAA,CAAA,aAAA,CAACC,iBAAA,EAAK,SAAA,EAAU,qBACb,KAAA,CAAM,GAAA,CAAI,CAAA,IAAA,qBACTD,uBAAAA,CAAA,aAAA;AAAA,IAACC,eAAAA;AAAA,IAAA;AAAA,MACC,KAAK,IAAA,CAAK,KAAA;AAAA,MACV,WAAW,CAAA,+BAAA,EACT,WAAA,KAAgB,IAAA,CAAK,KAAA,GACjB,4BACA,mCACN,CAAA,CAAA;AAAA,MACA,OAAA,EAAS,MAAM,QAAA,CAAS,IAAA,CAAK,KAAK;AAAA,KAAA;AAAA,oBAElCD,uBAAAA,CAAA,aAAA,CAACE,eAAAA,EAAA,IAAA,EAAM,KAAK,KAAM;AAAA,GAErB,CACH,CACF,CAAA;AAEJ;AAEA,IAAO,oBAAA,GAAQ;ACZf,IAAM,iBAAgD,CAAC;AAAA,EACrD,UAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA,GAAe,IAAA;AAAA,EACf,eAAA,GAAkB,IAAA;AAAA,EAClB,OAAA,GAAU;AACZ,CAAA,KAAM;AACJ,EAAA,MAAM,YAAY,OAAA,KAAY,SAAA;AAC9B,EAAA,uBACEF,uBAAAA,CAAA,aAAA,CAACC,eAAAA,EAAA,EAAK,WAAU,gDAAA,EAAA,EACb,UAAA,CAAW,UAAA,mBACVD,uBAAAA,CAAA,aAAA;AAAA,IAACK,gBAAA;AAAA,IAAA;AAAA,MACC,KAAK,UAAA,CAAW,UAAA;AAAA,MAChB,IAAA,EAAK,YAAA;AAAA,MACL,SAAA,EAAW,YAAY,uBAAA,GAA0B;AAAA;AAAA,GACnD,mBAEAL,uBAAAA,CAAA,aAAA;AAAA,IAACC,eAAAA;AAAA,IAAA;AAAA,MACC,SAAA,EACE,YACI,4FAAA,GACA;AAAA,KAAA;AAAA,IAEP;AAAA,GAED,kBAEFD,uBAAAA,CAAA,aAAA,CAACC,iBAAA,EAAK,SAAA,EAAW,SAAA,GAAY,kBAAA,GAAqB,WAAA,EAAA,kBAChDD,wBAAA,aAAA,CAACC,eAAAA,EAAA,EAAK,SAAA,EAAU,yCAAA,EAAA,kBACdD,uBAAAA,CAAA,aAAA,CAACE,eAAAA,EAAA,EAAK,SAAA,EAAW,SAAA,GAAY,0BAA0B,yBAAA,EAAA,EACpD,UAAA,CAAW,KACd,CAAA,EACC,YAAA,IAAgB,CAAC,SAAA,oBAChBF,uBAAAA,CAAA,aAAA,CAACE,eAAAA,EAAA,EAAK,WAAU,4DAAA,EAAA,EACbI,iCAAA,CAAiB,WAAW,QAAQ,CACvC,CAEJ,CAAA,EACC,eAAA,IAAmB,UAAA,CAAW,WAAA,IAAe,CAAC,SAAA,oBAC7CN,uBAAAA,CAAA,aAAA,CAACE,iBAAA,EAAK,SAAA,EAAU,uCAAqC,UAAA,CAAW,WAAY,CAAA,kBAE9EF,uBAAAA,CAAA,aAAA,CAACE,iBAAA,EAAK,SAAA,EAAU,uCAAoC,oBAAA,EAAI,UAAA,CAAW,MAAO,CAAA,kBAC1EF,uBAAAA,CAAA,aAAA,CAACE,eAAAA,EAAA,EAAK,WAAU,mCAAA,EAAA,EAAoC,oBAAA,EAC9CK,6BAAY,UAAA,CAAW,KAAK,CAClC,CAAA,EACC,OAAA,IAAW,OAAA,CAAQ,MAAA,GAAS,CAAA,oBAC3BP,wBAAA,aAAA,CAACC,eAAAA,EAAA,EAAK,SAAA,EAAW,SAAA,GAAY,iBAAA,GAAoB,qBAC9C,OAAA,CAAQ,GAAA,CAAI,CAAA,MAAA,qBACXD,uBAAAA,CAAA,aAAA;AAAA,IAACG,iBAAAA;AAAA,IAAA;AAAA,MACC,KAAK,MAAA,CAAO,KAAA;AAAA,MACZ,SAAA,EACE,MAAA,CAAO,OAAA,KAAY,OAAA,GACf,6FAAA,GACA,qEAAA;AAAA,MAEN,SAAS,MAAA,CAAO;AAAA,KAAA;AAAA,IAEf,MAAA,CAAO;AAAA,GAEX,CACH,CAEJ,CACF,CAAA;AAEJ,CAAA;AAEA,IAAO,sBAAA,GAAQ;ACxFf,IAAM,YAAA,GAA4C,CAAC,EAAE,IAAA,EAAK,KAAM;AAC9D,EAAA,uBACEH,wBAAA,aAAA,CAACC,eAAAA,EAAA,EAAK,SAAA,EAAU,mCAAA,EAAA,kBACdD,uBAAAA,CAAA,aAAA;AAAA,IAACC,eAAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,CAAA,uDAAA,EACT,IAAA,KAAS,QAAA,GAAW,4BAA4B,yBAClD,CAAA;AAAA,KAAA;AAAA,oBAEAD,wBAAA,aAAA,CAACE,eAAAA,EAAA,MAAM,IAAA,KAAS,QAAA,GAAW,MAAM,QAAI,CAAA;AAAA,oBACrCF,uBAAAA,CAAA,aAAA,CAACE,eAAAA,EAAA,MAAK,0BAAI;AAAA,GACZ,kBACAF,uBAAAA,CAAA,aAAA,CAACC,eAAAA,EAAA,EAAK,SAAA,EAAU,0BAAA,EAA2B,CAAA,kBAC3CD,uBAAAA,CAAA,aAAA;AAAA,IAACC,eAAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,CAAA,uDAAA,EACT,IAAA,KAAS,MAAA,GAAS,4BAA4B,yBAChD,CAAA;AAAA,KAAA;AAAA,oBAEAD,uBAAAA,CAAA,aAAA,CAACE,eAAAA,EAAA,MAAK,GAAC,CAAA;AAAA,oBACPF,uBAAAA,CAAA,aAAA,CAACE,eAAAA,EAAA,MAAK,0BAAI;AAAA,GAEd,CAAA;AAEJ,CAAA;AAEA,IAAO,oBAAA,GAAQ;ACXR,IAAM,YAAsC,CAAC;AAAA,EAClD,KAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA,GAAO,MAAA;AAAA,EACP;AACF,CAAA,KAAM;AACJ,EAAA,uBACEF,uBAAAA,CAAA,aAAA,CAACC,eAAAA,EAAA,EAAK,WAAU,MAAA,EAAA,kBACdD,uBAAAA,CAAA,aAAA,CAACE,iBAAA,EAAK,SAAA,EAAU,4BAA0B,KAAM,CAAA,kBAChDF,uBAAAA,CAAA,aAAA;AAAA,IAACQ,gBAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAS,CAAC,KAAA,KAAyC,QAAA,CAAS,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,MAC9E,SAAA,EAAW,CAAA,gDAAA,EACT,KAAA,GAAQ,iBAAA,GAAoB,kBAC9B,CAAA,CAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA;AAAA,GACF,EACC,KAAA,oBAASR,uBAAAA,CAAA,aAAA,CAACE,iBAAA,EAAK,SAAA,EAAU,kCAAA,EAAA,EAAoC,KAAM,CACtE,CAAA;AAEJ;AAEO,IAAM,eAA4C,CAAC;AAAA,EACxD,KAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,uBACEF,uBAAAA,CAAA,aAAA,CAACC,eAAAA,EAAA,EAAK,WAAU,MAAA,EAAA,kBACdD,uBAAAA,CAAA,aAAA,CAACE,iBAAA,EAAK,SAAA,EAAU,4BAA0B,KAAM,CAAA,kBAChDF,uBAAAA,CAAA,aAAA;AAAA,IAACS,mBAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAS,CAAC,KAAA,KAAyC,QAAA,CAAS,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,MAC9E,SAAA,EAAW,CAAA,yDAAA,EACT,KAAA,GAAQ,iBAAA,GAAoB,kBAC9B,CAAA,CAAA;AAAA,MACA;AAAA;AAAA,GACF,EACC,KAAA,oBAAST,uBAAAA,CAAA,aAAA,CAACE,iBAAA,EAAK,SAAA,EAAU,kCAAA,EAAA,EAAoC,KAAM,CACtE,CAAA;AAEJ;AC1DA,IAAM,eAA4C,CAAC,EAAE,MAAM,UAAA,EAAY,UAAA,EAAY,UAAS,KAAM;AAChG,EAAA,uBACEF,uBAAAA,CAAA,aAAA,CAACC,eAAAA,EAAA,EAAK,SAAA,EAAU,+CAAA,EAAA,EACb,IAAA,CAAK,UAAA,CAAW,UAAA,mBACfD,uBAAAA,CAAA,aAAA;AAAA,IAACK,gBAAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,KAAK,UAAA,CAAW,UAAA;AAAA,MACrB,IAAA,EAAK,YAAA;AAAA,MACL,SAAA,EAAU;AAAA;AAAA,GACZ,mBAEAL,uBAAAA,CAAA,aAAA,CAACC,eAAAA,EAAA,EAAK,SAAA,EAAU,4FAAA,EAAA,EAA6F,0BAE7G,CAAA,kBAEFD,uBAAAA,CAAA,aAAA,CAACC,eAAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAA,kBACdD,uBAAAA,CAAA,aAAA,CAACE,eAAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAA,EAAyB,IAAA,CAAK,UAAA,CAAW,KAAM,CAAA,kBAC/DF,uBAAAA,CAAA,aAAA,CAACE,eAAAA,EAAA,EAAK,SAAA,EAAU,mCAAA,EAAA,EAAoC,oBAAA,EAAI,IAAA,CAAK,UAAA,CAAW,MAAO,CAAA,kBAC/EF,uBAAAA,CAAA,aAAA,CAACE,eAAAA,EAAA,EAAK,SAAA,EAAU,mCAAA,EAAA,EAAoC,oBAAA,EAC9CK,4BAAA,CAAY,IAAA,CAAK,UAAA,CAAW,KAAK,CACvC,CAAA,kBACAP,uBAAAA,CAAA,aAAA,CAACC,eAAAA,EAAA,EAAK,SAAA,EAAU,8BAAA,EAAA,kBACdD,uBAAAA,CAAA,aAAA;AAAA,IAACG,iBAAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,gFAAA;AAAA,MACV,OAAA,EAAS;AAAA,KAAA;AAAA,IACV;AAAA,GAED,kBACAH,uBAAAA,CAAA,aAAA,CAACE,eAAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAA,EAAyB,IAAA,CAAK,QAAS,CAAA,kBACvDF,uBAAAA,CAAA,aAAA;AAAA,IAACG,iBAAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,gFAAA;AAAA,MACV,OAAA,EAAS;AAAA,KAAA;AAAA,IACV;AAAA,GAED,kBACAH,uBAAAA,CAAA,aAAA;AAAA,IAACG,iBAAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,uFAAA;AAAA,MACV,OAAA,EAAS;AAAA,KAAA;AAAA,IACV;AAAA,GAGH,CACF,CACF,CAAA;AAEJ,CAAA;AAEA,IAAO,oBAAA,GAAQ;ACrDf,IAAM,cAAA,GAAyC;AAAA,EAC7C,OAAA,EAAS,oBAAA;AAAA,EACT,SAAA,EAAW,oBAAA;AAAA,EACX,SAAA,EAAW,oBAAA;AAAA,EACX,SAAA,EAAW;AACb,CAAA;AAMA,IAAM,iBAAA,GAAsD,CAAC,EAAE,MAAA,EAAO,KAAM;AAC1E,EAAA,uBACEH,uBAAAA,CAAA,aAAA,CAACC,eAAAA,EAAA,EAAK,SAAA,EAAU,+CAAA,EAAA,EACb,MAAA,CAAO,UAAA,EAAY,UAAA,mBAClBD,uBAAAA,CAAA,aAAA;AAAA,IAACK,gBAAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,OAAO,UAAA,CAAW,UAAA;AAAA,MACvB,IAAA,EAAK,YAAA;AAAA,MACL,SAAA,EAAU;AAAA;AAAA,sBAGZL,uBAAAA,CAAA,cAACC,eAAAA,EAAA,EAAK,WAAU,4FAAA,EAAA,EAA6F,0BAE7G,mBAEFD,uBAAAA,CAAA,cAACC,eAAAA,EAAA,EAAK,WAAU,QAAA,EAAA,kBACdD,wBAAA,aAAA,CAACE,eAAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAA,EAAyB,OAAO,UAAA,EAAY,KAAA,IAAS,cAAK,CAAA,kBAC1EF,wBAAA,aAAA,CAACE,eAAAA,EAAA,EAAK,SAAA,EAAU,mCAAA,EAAA,EAAoC,sBAAI,MAAA,CAAO,QAAS,mBACxEF,uBAAAA,CAAA,cAACE,eAAAA,EAAA,EAAK,WAAU,mCAAA,EAAA,EAAoC,oBAAA,EAC9CK,6BAAY,MAAA,CAAO,UAAA,EAAY,KAAK,CAC1C,CAAA,kBACAP,uBAAAA,CAAA,aAAA,CAACC,iBAAA,EAAK,SAAA,EAAU,4DACdD,uBAAAA,CAAA,cAACE,eAAAA,EAAA,EAAK,WAAU,wBAAA,EAAA,EAAyB,oBAAA,EACnC,eAAe,MAAA,CAAO,MAAM,KAAK,MAAA,CAAO,MAC9C,mBACAF,uBAAAA,CAAA,cAACE,eAAAA,EAAA,EAAK,WAAU,wBAAA,EAAA,EAA0B,MAAA,CAAO,WAAW,KAAA,CAAM,CAAA,EAAG,EAAE,CAAE,CAC3E,CACF,CACF,CAAA;AAEJ,CAAA;AAEA,IAAO,yBAAA,GAAQ","file":"index.js","sourcesContent":["import React from 'react';\nimport { Button, Text, View } from '@tarojs/components';\n\ntype HeaderAction = {\n label: string;\n onClick: () => void;\n variant?: 'primary' | 'ghost';\n};\n\ntype HeaderCta = {\n label: string;\n onClick: () => void;\n};\n\ninterface PageHeaderProps {\n title: string;\n subtitle?: string;\n actions?: HeaderAction[];\n cta?: HeaderCta;\n}\n\nconst PageHeader: React.FC<PageHeaderProps> = ({ title, subtitle, actions, cta }) => {\n return (\n <View className=\"mx-4 mt-6 rounded-3xl bg-white px-5 py-5 shadow-xl\">\n <View className=\"flex items-start justify-between\">\n <View>\n <Text className=\"text-xl font-semibold\">{title}</Text>\n {subtitle && <Text className=\"mt-2 block text-sm text-slate-500\">{subtitle}</Text>}\n </View>\n {actions && actions.length > 0 && (\n <View className=\"flex flex-col items-end gap-2\">\n {actions.map(action => (\n <Button\n key={action.label}\n className={\n action.variant === 'ghost'\n ? 'h-8 rounded-full border border-slate-200 bg-white px-4 text-xs font-semibold text-slate-700'\n : 'h-8 rounded-full bg-slate-900 px-4 text-xs font-semibold text-white'\n }\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ))}\n </View>\n )}\n </View>\n {cta && (\n <Button\n className=\"mt-4 h-10 w-32 rounded-full bg-slate-900 text-sm font-semibold text-white\"\n onClick={cta.onClick}\n >\n {cta.label}\n </Button>\n )}\n </View>\n );\n};\n\nexport default PageHeader;\n","import React from 'react';\nimport { ScrollView, Text, View } from '@tarojs/components';\n\nexport type CategoryTabItem<T extends string = string> = {\n value: T;\n label: string;\n};\n\ninterface CategoryTabsProps<T extends string = string> {\n items: CategoryTabItem<T>[];\n activeValue: T;\n onChange: (value: T) => void;\n}\n\nfunction CategoryTabs<T extends string = string>({\n items,\n activeValue,\n onChange\n}: CategoryTabsProps<T>) {\n return (\n <ScrollView scrollX className=\"mt-3\" showScrollbar={false}>\n <View className=\"flex gap-2 pb-2\">\n {items.map(item => (\n <View\n key={item.value}\n className={`rounded-full px-4 py-2 text-xs ${\n activeValue === item.value\n ? 'bg-slate-900 text-white'\n : 'bg-white text-slate-600 shadow-md'\n }`}\n onClick={() => onChange(item.value)}\n >\n <Text>{item.label}</Text>\n </View>\n ))}\n </View>\n </ScrollView>\n );\n}\n\nexport default CategoryTabs;\n","import React from 'react';\nimport { Button, Image, Text, View } from '@tarojs/components';\nimport type { ArtCollection, CollectionCategoryType } from '../../../types';\nimport { formatPrice } from '../../../logic/shared/format';\nimport { getCategoryLabel } from '../../../logic/shared/category';\n\ntype ActionButton = {\n label: string;\n onClick: () => void;\n variant?: 'primary' | 'ghost';\n};\n\ntype CollectionLike = Pick<\n ArtCollection,\n 'id' | 'title' | 'number' | 'coverImage' | 'price'\n> & {\n description?: string;\n category?: CollectionCategoryType;\n};\n\ninterface CollectionCardProps {\n collection: CollectionLike;\n actions?: ActionButton[];\n showCategory?: boolean;\n showDescription?: boolean;\n variant?: 'default' | 'compact';\n}\n\nconst CollectionCard: React.FC<CollectionCardProps> = ({\n collection,\n actions,\n showCategory = true,\n showDescription = true,\n variant = 'default'\n}) => {\n const isCompact = variant === 'compact';\n return (\n <View className=\"overflow-hidden rounded-3xl bg-white shadow-xl\">\n {collection.coverImage ? (\n <Image\n src={collection.coverImage}\n mode=\"aspectFill\"\n className={isCompact ? 'h-24 w-24 rounded-2xl' : 'h-44 w-full'}\n />\n ) : (\n <View\n className={\n isCompact\n ? 'flex h-24 w-24 items-center justify-center rounded-2xl bg-slate-200 text-xs text-slate-500'\n : 'flex h-44 items-center justify-center bg-slate-200 text-sm text-slate-500'\n }\n >\n 暂无图片\n </View>\n )}\n <View className={isCompact ? 'flex-1 px-3 py-1' : 'px-4 py-4'}>\n <View className=\"flex items-center justify-between gap-2\">\n <Text className={isCompact ? 'text-sm font-semibold' : 'text-base font-semibold'}>\n {collection.title}\n </Text>\n {showCategory && !isCompact && (\n <Text className=\"rounded-full bg-slate-100 px-3 py-1 text-xs text-slate-600\">\n {getCategoryLabel(collection.category)}\n </Text>\n )}\n </View>\n {showDescription && collection.description && !isCompact && (\n <Text className=\"mt-2 block text-xs text-slate-500\">{collection.description}</Text>\n )}\n <Text className=\"mt-1 block text-xs text-slate-500\">编号:{collection.number}</Text>\n <Text className=\"mt-1 block text-xs text-slate-500\">\n 价格:{formatPrice(collection.price)}\n </Text>\n {actions && actions.length > 0 && (\n <View className={isCompact ? 'mt-2 flex gap-2' : 'mt-4 flex gap-2'}>\n {actions.map(action => (\n <Button\n key={action.label}\n className={\n action.variant === 'ghost'\n ? 'h-8 rounded-full border border-slate-200 bg-white px-4 text-xs font-semibold text-slate-700'\n : 'h-8 rounded-full bg-slate-900 px-4 text-xs font-semibold text-white'\n }\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ))}\n </View>\n )}\n </View>\n </View>\n );\n};\n\nexport default CollectionCard;\n","import React from 'react';\nimport { Text, View } from '@tarojs/components';\n\ninterface BookingStepsProps {\n step: 'select' | 'form';\n}\n\nconst BookingSteps: React.FC<BookingStepsProps> = ({ step }) => {\n return (\n <View className=\"mx-4 mt-4 flex items-center gap-3\">\n <View\n className={`flex items-center gap-2 rounded-full px-4 py-2 text-xs ${\n step === 'select' ? 'bg-slate-900 text-white' : 'bg-white text-slate-600'\n }`}\n >\n <Text>{step === 'select' ? '1' : '✓'}</Text>\n <Text>选择画集</Text>\n </View>\n <View className=\"h-px flex-1 bg-slate-200\" />\n <View\n className={`flex items-center gap-2 rounded-full px-4 py-2 text-xs ${\n step === 'form' ? 'bg-slate-900 text-white' : 'bg-white text-slate-600'\n }`}\n >\n <Text>2</Text>\n <Text>填写信息</Text>\n </View>\n </View>\n );\n};\n\nexport default BookingSteps;\n","import React from 'react';\nimport { Input, Text, Textarea, View } from '@tarojs/components';\n\ninterface BaseFieldProps {\n label: string;\n value: string;\n placeholder?: string;\n disabled?: boolean;\n error?: string;\n type?: 'text' | 'number';\n}\n\ninterface FormInputProps extends BaseFieldProps {\n onChange: (value: string) => void;\n}\n\ninterface FormTextareaProps extends BaseFieldProps {\n onChange: (value: string) => void;\n}\n\nexport const FormInput: React.FC<FormInputProps> = ({\n label,\n value,\n placeholder,\n disabled,\n error,\n type = 'text',\n onChange\n}) => {\n return (\n <View className=\"mt-4\">\n <Text className=\"text-xs text-slate-600\">{label}</Text>\n <Input\n value={value}\n placeholder={placeholder}\n onInput={(event: { detail: { value: string } }) => onChange(event.detail.value)}\n className={`mt-2 h-10 w-full rounded-xl border px-3 text-sm ${\n error ? 'border-rose-400' : 'border-slate-200'\n }`}\n disabled={disabled}\n type={type}\n />\n {error && <Text className=\"mt-1 block text-xs text-rose-500\">{error}</Text>}\n </View>\n );\n};\n\nexport const FormTextarea: React.FC<FormTextareaProps> = ({\n label,\n value,\n placeholder,\n disabled,\n error,\n onChange\n}) => {\n return (\n <View className=\"mt-4\">\n <Text className=\"text-xs text-slate-600\">{label}</Text>\n <Textarea\n value={value}\n placeholder={placeholder}\n onInput={(event: { detail: { value: string } }) => onChange(event.detail.value)}\n className={`mt-2 min-h-24 w-full rounded-xl border px-3 py-2 text-sm ${\n error ? 'border-rose-400' : 'border-slate-200'\n }`}\n disabled={disabled}\n />\n {error && <Text className=\"mt-1 block text-xs text-rose-500\">{error}</Text>}\n </View>\n );\n};\n","import React from 'react';\nimport { Button, Image, Text, View } from '@tarojs/components';\nimport type { CartItem } from '../../../types/cart';\nimport { formatPrice } from '../../../logic/shared/format';\n\ninterface CartItemCardProps {\n item: CartItem;\n onIncrease: () => void;\n onDecrease: () => void;\n onRemove: () => void;\n}\n\nconst CartItemCard: React.FC<CartItemCardProps> = ({ item, onIncrease, onDecrease, onRemove }) => {\n return (\n <View className=\"flex gap-3 rounded-2xl bg-white p-3 shadow-md\">\n {item.collection.coverImage ? (\n <Image\n src={item.collection.coverImage}\n mode=\"aspectFill\"\n className=\"h-20 w-20 rounded-2xl\"\n />\n ) : (\n <View className=\"flex h-20 w-20 items-center justify-center rounded-2xl bg-slate-200 text-xs text-slate-500\">\n 暂无图片\n </View>\n )}\n <View className=\"flex-1\">\n <Text className=\"text-sm font-semibold\">{item.collection.title}</Text>\n <Text className=\"mt-1 block text-xs text-slate-500\">编号:{item.collection.number}</Text>\n <Text className=\"mt-1 block text-xs text-slate-500\">\n 价格:{formatPrice(item.collection.price)}\n </Text>\n <View className=\"mt-3 flex items-center gap-2\">\n <Button\n className=\"h-8 w-8 rounded-full border border-slate-200 bg-white text-base text-slate-700\"\n onClick={onDecrease}\n >\n -\n </Button>\n <Text className=\"text-sm font-semibold\">{item.quantity}</Text>\n <Button\n className=\"h-8 w-8 rounded-full border border-slate-200 bg-white text-base text-slate-700\"\n onClick={onIncrease}\n >\n +\n </Button>\n <Button\n className=\"ml-auto h-8 rounded-full border border-rose-200 bg-rose-50 px-3 text-xs text-rose-600\"\n onClick={onRemove}\n >\n 移除\n </Button>\n </View>\n </View>\n </View>\n );\n};\n\nexport default CartItemCard;\n","import React from 'react';\nimport { Image, Text, View } from '@tarojs/components';\nimport type { Booking } from '../../../types/booking';\nimport { formatPrice } from '../../../logic/shared/format';\n\nconst statusLabelMap: Record<string, string> = {\n pending: '待确认',\n confirmed: '已确认',\n completed: '已完成',\n cancelled: '已取消'\n};\n\ninterface HistoryRecordCardProps {\n record: Booking;\n}\n\nconst HistoryRecordCard: React.FC<HistoryRecordCardProps> = ({ record }) => {\n return (\n <View className=\"flex gap-3 rounded-2xl bg-white p-3 shadow-md\">\n {record.collection?.coverImage ? (\n <Image\n src={record.collection.coverImage}\n mode=\"aspectFill\"\n className=\"h-20 w-20 rounded-2xl\"\n />\n ) : (\n <View className=\"flex h-20 w-20 items-center justify-center rounded-2xl bg-slate-200 text-xs text-slate-500\">\n 暂无图片\n </View>\n )}\n <View className=\"flex-1\">\n <Text className=\"text-sm font-semibold\">{record.collection?.title || '画集'}</Text>\n <Text className=\"mt-1 block text-xs text-slate-500\">数量:{record.quantity}</Text>\n <Text className=\"mt-1 block text-xs text-slate-500\">\n 价格:{formatPrice(record.collection?.price)}\n </Text>\n <View className=\"mt-2 flex items-center justify-between\">\n <Text className=\"text-xs text-slate-500\">\n 状态:{statusLabelMap[record.status] || record.status}\n </Text>\n <Text className=\"text-xs text-slate-400\">{record.createdAt?.slice(0, 10)}</Text>\n </View>\n </View>\n </View>\n );\n};\n\nexport default HistoryRecordCard;\n"]}
@@ -0,0 +1,183 @@
1
+ import { getCategoryLabel, formatPrice } from '../../../chunk-ANKVXRPY.mjs';
2
+ import '../../../chunk-WMJKH4XE.mjs';
3
+ import React3 from 'react';
4
+ import { View, Text, Button, ScrollView, Image, Input, Textarea } from '@tarojs/components';
5
+
6
+ var PageHeader = ({ title, subtitle, actions, cta }) => {
7
+ return /* @__PURE__ */ React3.createElement(View, { className: "mx-4 mt-6 rounded-3xl bg-white px-5 py-5 shadow-xl" }, /* @__PURE__ */ React3.createElement(View, { className: "flex items-start justify-between" }, /* @__PURE__ */ React3.createElement(View, null, /* @__PURE__ */ React3.createElement(Text, { className: "text-xl font-semibold" }, title), subtitle && /* @__PURE__ */ React3.createElement(Text, { className: "mt-2 block text-sm text-slate-500" }, subtitle)), actions && actions.length > 0 && /* @__PURE__ */ React3.createElement(View, { className: "flex flex-col items-end gap-2" }, actions.map((action) => /* @__PURE__ */ React3.createElement(
8
+ Button,
9
+ {
10
+ key: action.label,
11
+ className: action.variant === "ghost" ? "h-8 rounded-full border border-slate-200 bg-white px-4 text-xs font-semibold text-slate-700" : "h-8 rounded-full bg-slate-900 px-4 text-xs font-semibold text-white",
12
+ onClick: action.onClick
13
+ },
14
+ action.label
15
+ )))), cta && /* @__PURE__ */ React3.createElement(
16
+ Button,
17
+ {
18
+ className: "mt-4 h-10 w-32 rounded-full bg-slate-900 text-sm font-semibold text-white",
19
+ onClick: cta.onClick
20
+ },
21
+ cta.label
22
+ ));
23
+ };
24
+ var PageHeader_default = PageHeader;
25
+ function CategoryTabs({
26
+ items,
27
+ activeValue,
28
+ onChange
29
+ }) {
30
+ return /* @__PURE__ */ React3.createElement(ScrollView, { scrollX: true, className: "mt-3", showScrollbar: false }, /* @__PURE__ */ React3.createElement(View, { className: "flex gap-2 pb-2" }, items.map((item) => /* @__PURE__ */ React3.createElement(
31
+ View,
32
+ {
33
+ key: item.value,
34
+ className: `rounded-full px-4 py-2 text-xs ${activeValue === item.value ? "bg-slate-900 text-white" : "bg-white text-slate-600 shadow-md"}`,
35
+ onClick: () => onChange(item.value)
36
+ },
37
+ /* @__PURE__ */ React3.createElement(Text, null, item.label)
38
+ ))));
39
+ }
40
+ var CategoryTabs_default = CategoryTabs;
41
+ var CollectionCard = ({
42
+ collection,
43
+ actions,
44
+ showCategory = true,
45
+ showDescription = true,
46
+ variant = "default"
47
+ }) => {
48
+ const isCompact = variant === "compact";
49
+ return /* @__PURE__ */ React3.createElement(View, { className: "overflow-hidden rounded-3xl bg-white shadow-xl" }, collection.coverImage ? /* @__PURE__ */ React3.createElement(
50
+ Image,
51
+ {
52
+ src: collection.coverImage,
53
+ mode: "aspectFill",
54
+ className: isCompact ? "h-24 w-24 rounded-2xl" : "h-44 w-full"
55
+ }
56
+ ) : /* @__PURE__ */ React3.createElement(
57
+ View,
58
+ {
59
+ className: isCompact ? "flex h-24 w-24 items-center justify-center rounded-2xl bg-slate-200 text-xs text-slate-500" : "flex h-44 items-center justify-center bg-slate-200 text-sm text-slate-500"
60
+ },
61
+ "\u6682\u65E0\u56FE\u7247"
62
+ ), /* @__PURE__ */ React3.createElement(View, { className: isCompact ? "flex-1 px-3 py-1" : "px-4 py-4" }, /* @__PURE__ */ React3.createElement(View, { className: "flex items-center justify-between gap-2" }, /* @__PURE__ */ React3.createElement(Text, { className: isCompact ? "text-sm font-semibold" : "text-base font-semibold" }, collection.title), showCategory && !isCompact && /* @__PURE__ */ React3.createElement(Text, { className: "rounded-full bg-slate-100 px-3 py-1 text-xs text-slate-600" }, getCategoryLabel(collection.category))), showDescription && collection.description && !isCompact && /* @__PURE__ */ React3.createElement(Text, { className: "mt-2 block text-xs text-slate-500" }, collection.description), /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs text-slate-500" }, "\u7F16\u53F7\uFF1A", collection.number), /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs text-slate-500" }, "\u4EF7\u683C\uFF1A", formatPrice(collection.price)), actions && actions.length > 0 && /* @__PURE__ */ React3.createElement(View, { className: isCompact ? "mt-2 flex gap-2" : "mt-4 flex gap-2" }, actions.map((action) => /* @__PURE__ */ React3.createElement(
63
+ Button,
64
+ {
65
+ key: action.label,
66
+ className: action.variant === "ghost" ? "h-8 rounded-full border border-slate-200 bg-white px-4 text-xs font-semibold text-slate-700" : "h-8 rounded-full bg-slate-900 px-4 text-xs font-semibold text-white",
67
+ onClick: action.onClick
68
+ },
69
+ action.label
70
+ )))));
71
+ };
72
+ var CollectionCard_default = CollectionCard;
73
+ var BookingSteps = ({ step }) => {
74
+ return /* @__PURE__ */ React3.createElement(View, { className: "mx-4 mt-4 flex items-center gap-3" }, /* @__PURE__ */ React3.createElement(
75
+ View,
76
+ {
77
+ className: `flex items-center gap-2 rounded-full px-4 py-2 text-xs ${step === "select" ? "bg-slate-900 text-white" : "bg-white text-slate-600"}`
78
+ },
79
+ /* @__PURE__ */ React3.createElement(Text, null, step === "select" ? "1" : "\u2713"),
80
+ /* @__PURE__ */ React3.createElement(Text, null, "\u9009\u62E9\u753B\u96C6")
81
+ ), /* @__PURE__ */ React3.createElement(View, { className: "h-px flex-1 bg-slate-200" }), /* @__PURE__ */ React3.createElement(
82
+ View,
83
+ {
84
+ className: `flex items-center gap-2 rounded-full px-4 py-2 text-xs ${step === "form" ? "bg-slate-900 text-white" : "bg-white text-slate-600"}`
85
+ },
86
+ /* @__PURE__ */ React3.createElement(Text, null, "2"),
87
+ /* @__PURE__ */ React3.createElement(Text, null, "\u586B\u5199\u4FE1\u606F")
88
+ ));
89
+ };
90
+ var BookingSteps_default = BookingSteps;
91
+ var FormInput = ({
92
+ label,
93
+ value,
94
+ placeholder,
95
+ disabled,
96
+ error,
97
+ type = "text",
98
+ onChange
99
+ }) => {
100
+ return /* @__PURE__ */ React3.createElement(View, { className: "mt-4" }, /* @__PURE__ */ React3.createElement(Text, { className: "text-xs text-slate-600" }, label), /* @__PURE__ */ React3.createElement(
101
+ Input,
102
+ {
103
+ value,
104
+ placeholder,
105
+ onInput: (event) => onChange(event.detail.value),
106
+ className: `mt-2 h-10 w-full rounded-xl border px-3 text-sm ${error ? "border-rose-400" : "border-slate-200"}`,
107
+ disabled,
108
+ type
109
+ }
110
+ ), error && /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs text-rose-500" }, error));
111
+ };
112
+ var FormTextarea = ({
113
+ label,
114
+ value,
115
+ placeholder,
116
+ disabled,
117
+ error,
118
+ onChange
119
+ }) => {
120
+ return /* @__PURE__ */ React3.createElement(View, { className: "mt-4" }, /* @__PURE__ */ React3.createElement(Text, { className: "text-xs text-slate-600" }, label), /* @__PURE__ */ React3.createElement(
121
+ Textarea,
122
+ {
123
+ value,
124
+ placeholder,
125
+ onInput: (event) => onChange(event.detail.value),
126
+ className: `mt-2 min-h-24 w-full rounded-xl border px-3 py-2 text-sm ${error ? "border-rose-400" : "border-slate-200"}`,
127
+ disabled
128
+ }
129
+ ), error && /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs text-rose-500" }, error));
130
+ };
131
+ var CartItemCard = ({ item, onIncrease, onDecrease, onRemove }) => {
132
+ return /* @__PURE__ */ React3.createElement(View, { className: "flex gap-3 rounded-2xl bg-white p-3 shadow-md" }, item.collection.coverImage ? /* @__PURE__ */ React3.createElement(
133
+ Image,
134
+ {
135
+ src: item.collection.coverImage,
136
+ mode: "aspectFill",
137
+ className: "h-20 w-20 rounded-2xl"
138
+ }
139
+ ) : /* @__PURE__ */ React3.createElement(View, { className: "flex h-20 w-20 items-center justify-center rounded-2xl bg-slate-200 text-xs text-slate-500" }, "\u6682\u65E0\u56FE\u7247"), /* @__PURE__ */ React3.createElement(View, { className: "flex-1" }, /* @__PURE__ */ React3.createElement(Text, { className: "text-sm font-semibold" }, item.collection.title), /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs text-slate-500" }, "\u7F16\u53F7\uFF1A", item.collection.number), /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs text-slate-500" }, "\u4EF7\u683C\uFF1A", formatPrice(item.collection.price)), /* @__PURE__ */ React3.createElement(View, { className: "mt-3 flex items-center gap-2" }, /* @__PURE__ */ React3.createElement(
140
+ Button,
141
+ {
142
+ className: "h-8 w-8 rounded-full border border-slate-200 bg-white text-base text-slate-700",
143
+ onClick: onDecrease
144
+ },
145
+ "-"
146
+ ), /* @__PURE__ */ React3.createElement(Text, { className: "text-sm font-semibold" }, item.quantity), /* @__PURE__ */ React3.createElement(
147
+ Button,
148
+ {
149
+ className: "h-8 w-8 rounded-full border border-slate-200 bg-white text-base text-slate-700",
150
+ onClick: onIncrease
151
+ },
152
+ "+"
153
+ ), /* @__PURE__ */ React3.createElement(
154
+ Button,
155
+ {
156
+ className: "ml-auto h-8 rounded-full border border-rose-200 bg-rose-50 px-3 text-xs text-rose-600",
157
+ onClick: onRemove
158
+ },
159
+ "\u79FB\u9664"
160
+ ))));
161
+ };
162
+ var CartItemCard_default = CartItemCard;
163
+ var statusLabelMap = {
164
+ pending: "\u5F85\u786E\u8BA4",
165
+ confirmed: "\u5DF2\u786E\u8BA4",
166
+ completed: "\u5DF2\u5B8C\u6210",
167
+ cancelled: "\u5DF2\u53D6\u6D88"
168
+ };
169
+ var HistoryRecordCard = ({ record }) => {
170
+ return /* @__PURE__ */ React3.createElement(View, { className: "flex gap-3 rounded-2xl bg-white p-3 shadow-md" }, record.collection?.coverImage ? /* @__PURE__ */ React3.createElement(
171
+ Image,
172
+ {
173
+ src: record.collection.coverImage,
174
+ mode: "aspectFill",
175
+ className: "h-20 w-20 rounded-2xl"
176
+ }
177
+ ) : /* @__PURE__ */ React3.createElement(View, { className: "flex h-20 w-20 items-center justify-center rounded-2xl bg-slate-200 text-xs text-slate-500" }, "\u6682\u65E0\u56FE\u7247"), /* @__PURE__ */ React3.createElement(View, { className: "flex-1" }, /* @__PURE__ */ React3.createElement(Text, { className: "text-sm font-semibold" }, record.collection?.title || "\u753B\u96C6"), /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs text-slate-500" }, "\u6570\u91CF\uFF1A", record.quantity), /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs text-slate-500" }, "\u4EF7\u683C\uFF1A", formatPrice(record.collection?.price)), /* @__PURE__ */ React3.createElement(View, { className: "mt-2 flex items-center justify-between" }, /* @__PURE__ */ React3.createElement(Text, { className: "text-xs text-slate-500" }, "\u72B6\u6001\uFF1A", statusLabelMap[record.status] || record.status), /* @__PURE__ */ React3.createElement(Text, { className: "text-xs text-slate-400" }, record.createdAt?.slice(0, 10)))));
178
+ };
179
+ var HistoryRecordCard_default = HistoryRecordCard;
180
+
181
+ export { BookingSteps_default as BookingSteps, CartItemCard_default as CartItemCard, CategoryTabs_default as CategoryTabs, FormInput, FormTextarea, HistoryRecordCard_default as HistoryRecordCard, CollectionCard_default as MiniappCollectionCard, PageHeader_default as PageHeader };
182
+ //# sourceMappingURL=index.mjs.map
183
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/showmasterpiece/ui/miniapp/components/PageHeader.tsx","../../../../src/showmasterpiece/ui/miniapp/components/CategoryTabs.tsx","../../../../src/showmasterpiece/ui/miniapp/components/CollectionCard.tsx","../../../../src/showmasterpiece/ui/miniapp/components/BookingSteps.tsx","../../../../src/showmasterpiece/ui/miniapp/components/FormField.tsx","../../../../src/showmasterpiece/ui/miniapp/components/CartItemCard.tsx","../../../../src/showmasterpiece/ui/miniapp/components/HistoryRecordCard.tsx"],"names":["React","View","Text","Button","Image"],"mappings":"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","file":"index.mjs","sourcesContent":["import React from 'react';\nimport { Button, Text, View } from '@tarojs/components';\n\ntype HeaderAction = {\n label: string;\n onClick: () => void;\n variant?: 'primary' | 'ghost';\n};\n\ntype HeaderCta = {\n label: string;\n onClick: () => void;\n};\n\ninterface PageHeaderProps {\n title: string;\n subtitle?: string;\n actions?: HeaderAction[];\n cta?: HeaderCta;\n}\n\nconst PageHeader: React.FC<PageHeaderProps> = ({ title, subtitle, actions, cta }) => {\n return (\n <View className=\"mx-4 mt-6 rounded-3xl bg-white px-5 py-5 shadow-xl\">\n <View className=\"flex items-start justify-between\">\n <View>\n <Text className=\"text-xl font-semibold\">{title}</Text>\n {subtitle && <Text className=\"mt-2 block text-sm text-slate-500\">{subtitle}</Text>}\n </View>\n {actions && actions.length > 0 && (\n <View className=\"flex flex-col items-end gap-2\">\n {actions.map(action => (\n <Button\n key={action.label}\n className={\n action.variant === 'ghost'\n ? 'h-8 rounded-full border border-slate-200 bg-white px-4 text-xs font-semibold text-slate-700'\n : 'h-8 rounded-full bg-slate-900 px-4 text-xs font-semibold text-white'\n }\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ))}\n </View>\n )}\n </View>\n {cta && (\n <Button\n className=\"mt-4 h-10 w-32 rounded-full bg-slate-900 text-sm font-semibold text-white\"\n onClick={cta.onClick}\n >\n {cta.label}\n </Button>\n )}\n </View>\n );\n};\n\nexport default PageHeader;\n","import React from 'react';\nimport { ScrollView, Text, View } from '@tarojs/components';\n\nexport type CategoryTabItem<T extends string = string> = {\n value: T;\n label: string;\n};\n\ninterface CategoryTabsProps<T extends string = string> {\n items: CategoryTabItem<T>[];\n activeValue: T;\n onChange: (value: T) => void;\n}\n\nfunction CategoryTabs<T extends string = string>({\n items,\n activeValue,\n onChange\n}: CategoryTabsProps<T>) {\n return (\n <ScrollView scrollX className=\"mt-3\" showScrollbar={false}>\n <View className=\"flex gap-2 pb-2\">\n {items.map(item => (\n <View\n key={item.value}\n className={`rounded-full px-4 py-2 text-xs ${\n activeValue === item.value\n ? 'bg-slate-900 text-white'\n : 'bg-white text-slate-600 shadow-md'\n }`}\n onClick={() => onChange(item.value)}\n >\n <Text>{item.label}</Text>\n </View>\n ))}\n </View>\n </ScrollView>\n );\n}\n\nexport default CategoryTabs;\n","import React from 'react';\nimport { Button, Image, Text, View } from '@tarojs/components';\nimport type { ArtCollection, CollectionCategoryType } from '../../../types';\nimport { formatPrice } from '../../../logic/shared/format';\nimport { getCategoryLabel } from '../../../logic/shared/category';\n\ntype ActionButton = {\n label: string;\n onClick: () => void;\n variant?: 'primary' | 'ghost';\n};\n\ntype CollectionLike = Pick<\n ArtCollection,\n 'id' | 'title' | 'number' | 'coverImage' | 'price'\n> & {\n description?: string;\n category?: CollectionCategoryType;\n};\n\ninterface CollectionCardProps {\n collection: CollectionLike;\n actions?: ActionButton[];\n showCategory?: boolean;\n showDescription?: boolean;\n variant?: 'default' | 'compact';\n}\n\nconst CollectionCard: React.FC<CollectionCardProps> = ({\n collection,\n actions,\n showCategory = true,\n showDescription = true,\n variant = 'default'\n}) => {\n const isCompact = variant === 'compact';\n return (\n <View className=\"overflow-hidden rounded-3xl bg-white shadow-xl\">\n {collection.coverImage ? (\n <Image\n src={collection.coverImage}\n mode=\"aspectFill\"\n className={isCompact ? 'h-24 w-24 rounded-2xl' : 'h-44 w-full'}\n />\n ) : (\n <View\n className={\n isCompact\n ? 'flex h-24 w-24 items-center justify-center rounded-2xl bg-slate-200 text-xs text-slate-500'\n : 'flex h-44 items-center justify-center bg-slate-200 text-sm text-slate-500'\n }\n >\n 暂无图片\n </View>\n )}\n <View className={isCompact ? 'flex-1 px-3 py-1' : 'px-4 py-4'}>\n <View className=\"flex items-center justify-between gap-2\">\n <Text className={isCompact ? 'text-sm font-semibold' : 'text-base font-semibold'}>\n {collection.title}\n </Text>\n {showCategory && !isCompact && (\n <Text className=\"rounded-full bg-slate-100 px-3 py-1 text-xs text-slate-600\">\n {getCategoryLabel(collection.category)}\n </Text>\n )}\n </View>\n {showDescription && collection.description && !isCompact && (\n <Text className=\"mt-2 block text-xs text-slate-500\">{collection.description}</Text>\n )}\n <Text className=\"mt-1 block text-xs text-slate-500\">编号:{collection.number}</Text>\n <Text className=\"mt-1 block text-xs text-slate-500\">\n 价格:{formatPrice(collection.price)}\n </Text>\n {actions && actions.length > 0 && (\n <View className={isCompact ? 'mt-2 flex gap-2' : 'mt-4 flex gap-2'}>\n {actions.map(action => (\n <Button\n key={action.label}\n className={\n action.variant === 'ghost'\n ? 'h-8 rounded-full border border-slate-200 bg-white px-4 text-xs font-semibold text-slate-700'\n : 'h-8 rounded-full bg-slate-900 px-4 text-xs font-semibold text-white'\n }\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ))}\n </View>\n )}\n </View>\n </View>\n );\n};\n\nexport default CollectionCard;\n","import React from 'react';\nimport { Text, View } from '@tarojs/components';\n\ninterface BookingStepsProps {\n step: 'select' | 'form';\n}\n\nconst BookingSteps: React.FC<BookingStepsProps> = ({ step }) => {\n return (\n <View className=\"mx-4 mt-4 flex items-center gap-3\">\n <View\n className={`flex items-center gap-2 rounded-full px-4 py-2 text-xs ${\n step === 'select' ? 'bg-slate-900 text-white' : 'bg-white text-slate-600'\n }`}\n >\n <Text>{step === 'select' ? '1' : '✓'}</Text>\n <Text>选择画集</Text>\n </View>\n <View className=\"h-px flex-1 bg-slate-200\" />\n <View\n className={`flex items-center gap-2 rounded-full px-4 py-2 text-xs ${\n step === 'form' ? 'bg-slate-900 text-white' : 'bg-white text-slate-600'\n }`}\n >\n <Text>2</Text>\n <Text>填写信息</Text>\n </View>\n </View>\n );\n};\n\nexport default BookingSteps;\n","import React from 'react';\nimport { Input, Text, Textarea, View } from '@tarojs/components';\n\ninterface BaseFieldProps {\n label: string;\n value: string;\n placeholder?: string;\n disabled?: boolean;\n error?: string;\n type?: 'text' | 'number';\n}\n\ninterface FormInputProps extends BaseFieldProps {\n onChange: (value: string) => void;\n}\n\ninterface FormTextareaProps extends BaseFieldProps {\n onChange: (value: string) => void;\n}\n\nexport const FormInput: React.FC<FormInputProps> = ({\n label,\n value,\n placeholder,\n disabled,\n error,\n type = 'text',\n onChange\n}) => {\n return (\n <View className=\"mt-4\">\n <Text className=\"text-xs text-slate-600\">{label}</Text>\n <Input\n value={value}\n placeholder={placeholder}\n onInput={(event: { detail: { value: string } }) => onChange(event.detail.value)}\n className={`mt-2 h-10 w-full rounded-xl border px-3 text-sm ${\n error ? 'border-rose-400' : 'border-slate-200'\n }`}\n disabled={disabled}\n type={type}\n />\n {error && <Text className=\"mt-1 block text-xs text-rose-500\">{error}</Text>}\n </View>\n );\n};\n\nexport const FormTextarea: React.FC<FormTextareaProps> = ({\n label,\n value,\n placeholder,\n disabled,\n error,\n onChange\n}) => {\n return (\n <View className=\"mt-4\">\n <Text className=\"text-xs text-slate-600\">{label}</Text>\n <Textarea\n value={value}\n placeholder={placeholder}\n onInput={(event: { detail: { value: string } }) => onChange(event.detail.value)}\n className={`mt-2 min-h-24 w-full rounded-xl border px-3 py-2 text-sm ${\n error ? 'border-rose-400' : 'border-slate-200'\n }`}\n disabled={disabled}\n />\n {error && <Text className=\"mt-1 block text-xs text-rose-500\">{error}</Text>}\n </View>\n );\n};\n","import React from 'react';\nimport { Button, Image, Text, View } from '@tarojs/components';\nimport type { CartItem } from '../../../types/cart';\nimport { formatPrice } from '../../../logic/shared/format';\n\ninterface CartItemCardProps {\n item: CartItem;\n onIncrease: () => void;\n onDecrease: () => void;\n onRemove: () => void;\n}\n\nconst CartItemCard: React.FC<CartItemCardProps> = ({ item, onIncrease, onDecrease, onRemove }) => {\n return (\n <View className=\"flex gap-3 rounded-2xl bg-white p-3 shadow-md\">\n {item.collection.coverImage ? (\n <Image\n src={item.collection.coverImage}\n mode=\"aspectFill\"\n className=\"h-20 w-20 rounded-2xl\"\n />\n ) : (\n <View className=\"flex h-20 w-20 items-center justify-center rounded-2xl bg-slate-200 text-xs text-slate-500\">\n 暂无图片\n </View>\n )}\n <View className=\"flex-1\">\n <Text className=\"text-sm font-semibold\">{item.collection.title}</Text>\n <Text className=\"mt-1 block text-xs text-slate-500\">编号:{item.collection.number}</Text>\n <Text className=\"mt-1 block text-xs text-slate-500\">\n 价格:{formatPrice(item.collection.price)}\n </Text>\n <View className=\"mt-3 flex items-center gap-2\">\n <Button\n className=\"h-8 w-8 rounded-full border border-slate-200 bg-white text-base text-slate-700\"\n onClick={onDecrease}\n >\n -\n </Button>\n <Text className=\"text-sm font-semibold\">{item.quantity}</Text>\n <Button\n className=\"h-8 w-8 rounded-full border border-slate-200 bg-white text-base text-slate-700\"\n onClick={onIncrease}\n >\n +\n </Button>\n <Button\n className=\"ml-auto h-8 rounded-full border border-rose-200 bg-rose-50 px-3 text-xs text-rose-600\"\n onClick={onRemove}\n >\n 移除\n </Button>\n </View>\n </View>\n </View>\n );\n};\n\nexport default CartItemCard;\n","import React from 'react';\nimport { Image, Text, View } from '@tarojs/components';\nimport type { Booking } from '../../../types/booking';\nimport { formatPrice } from '../../../logic/shared/format';\n\nconst statusLabelMap: Record<string, string> = {\n pending: '待确认',\n confirmed: '已确认',\n completed: '已完成',\n cancelled: '已取消'\n};\n\ninterface HistoryRecordCardProps {\n record: Booking;\n}\n\nconst HistoryRecordCard: React.FC<HistoryRecordCardProps> = ({ record }) => {\n return (\n <View className=\"flex gap-3 rounded-2xl bg-white p-3 shadow-md\">\n {record.collection?.coverImage ? (\n <Image\n src={record.collection.coverImage}\n mode=\"aspectFill\"\n className=\"h-20 w-20 rounded-2xl\"\n />\n ) : (\n <View className=\"flex h-20 w-20 items-center justify-center rounded-2xl bg-slate-200 text-xs text-slate-500\">\n 暂无图片\n </View>\n )}\n <View className=\"flex-1\">\n <Text className=\"text-sm font-semibold\">{record.collection?.title || '画集'}</Text>\n <Text className=\"mt-1 block text-xs text-slate-500\">数量:{record.quantity}</Text>\n <Text className=\"mt-1 block text-xs text-slate-500\">\n 价格:{formatPrice(record.collection?.price)}\n </Text>\n <View className=\"mt-2 flex items-center justify-between\">\n <Text className=\"text-xs text-slate-500\">\n 状态:{statusLabelMap[record.status] || record.status}\n </Text>\n <Text className=\"text-xs text-slate-400\">{record.createdAt?.slice(0, 10)}</Text>\n </View>\n </View>\n </View>\n );\n};\n\nexport default HistoryRecordCard;\n"]}